【发布时间】:2012-09-16 16:18:35
【问题描述】:
我需要在远程机器上运行一个 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 中 return self._local_objects[oid](*args, **dict(kwargs)) File "/usr/lib/python2.4/subprocess.py", line 542, in init errread, errwrite) 文件“/usr/lib/python2.4/subprocess.py”,第 975 行,在 _execute_child 中 raise child_exception OSError: [Errno 2] No such file or directory
======= 本地异常 ======== 回溯(最后一次调用):文件“”,第 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 行,在同步请求中 返回 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] 没有这样的文件或目录
我认为它无法运行该文件,因为我没有管理员权限(因为我没有提供远程机器的用户名和密码)?
救命!
【问题讨论】:
-
为什么不只是 $ ssh user@server /opt/android-sdk/tools/monkeyrunner -v ALL /opt/android-sdk/tools/MYSCRIPT.py
标签: android python centos monkeyrunner rpyc