我需要在远程机器上运行一个 monkeyrunner 脚本。我正在使用 python 来自动化它和 RPyC,以便我可以连接到其他机器,一切都在 CentOS 中运行。
下面写的是我使用的命令:
导入 rpyc
导入子流程
conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)
conn.execute ("打印'你好'")
subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)
这是结果:
无法打开指定的脚本文件
用法:monkeyrunner [选项] script_file
-s MonkeyServer IP 地址
-p MonkeyServer TCP 端口
-v MonkeyServer 日志记录级别
然后我意识到,如果你使用下面的命令,它就是在你的机器上运行命令。(例如: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)
并给我这个错误信息
=======远程回溯=======回溯(最近一次调用最后):文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg /rpyc/core/protocol.py”,第 300 行,在 _dispatch_request res = self._HANDLERS[handler](self, *args) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2- py2.4.egg/rpyc/core/protocol.py”,第 532 行,在 _handle_call 中返回 self._local_objects[oid](*args, **dict(kwargs)) 文件“/usr/lib/python2.4/subprocess .py”,第 542 行,在init errread,errwrite)文件“/usr/lib/python2.4/subprocess.py”,第 975 行,在 _execute_child 中引发 child_exception OSError:[Errno 2] 没有这样的文件或目录
======= 本地异常 ======== Traceback(最近一次调用最后):文件“”,第 1 行,在?文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py”,第 196 行,调用 返回 syncreq(_self, consts.HANDLE_CALL, args, kwargs) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py”,第 71 行,在 syncreq 返回 conn.sync_request( handler, oid, *args) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py”,第 438 行,在 sync_request raise obj OSError: [Errno 2] 没有这样的文件或目录
我认为它无法运行该文件,因为我没有管理员访问权限(因为我没有提供远程机器的用户名和密码)?
帮助!