我需要在远程机器上运行 monkeyrunner 脚本。我正在使用 python 来自动化它和 RPyC,这样我就可以连接到其他机器,一切都在 CentOS 中运行。
下面写的是我使用的命令:
import rpyc
import subprocess
conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)
conn.execute ("print 'Hello'")
subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
这是结果:
can't open specified script file
Usage : monkeyrunner [option] script_file
-s MonkeyServer IP Address
-p MonkeyServer TCP Port
-v MonkeyServer Logging level
然后我意识到,如果您使用下面的命令,它就会在您的机器上运行该命令。 (例如:Popen 中的命令是“ls”,它会给你的结果是 LOCALHOST 的当前目录中的文件和目录列表)因此,命令是错误的。
subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
所以我用这个替换了代码
conn.modules.subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
然后给我这个错误信息
======= Remote traceback ======= Traceback (most recent call last): File "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py", line 300, in _dispatch_request res = self._HANDLERS[handler](self, *args) File "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py", line 532, in _handle_call return self._local_objects[oid](*args, **dict(kwargs)) File "/usr/lib/python2.4/subprocess.py", line 542, in init errread, errwrite) File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory
======= Local exception ======== Traceback (most recent call last): File "", line 1, in ? File "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py", line 196, in call return syncreq(_self, consts.HANDLE_CALL, args, kwargs) File "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py", line 71, in syncreq return conn.sync_request(handler, oid, *args) File "/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py", line 438, in sync_request raise obj OSError: [Errno 2] No such file or directory
我认为它无法运行该文件,因为我没有管理员访问权限(因为我没有提供远程计算机的用户名和密码)?
帮助!
请您参考如下方法:
我看到你已经连接了
conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)
conn.execute ("print 'Hello'")
尝试使用下一个命令:
subprocess.Popen("/opt/android-sdk/tools/monkeyrunner
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
代替:
subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
