2

我需要在远程机器上运行一个 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] 没有这样的文件或目录

我认为它无法运行该文件,因为我没有管理员访问权限(因为我没有提供远程机器的用户名和密码)?

帮助!

4

2 回答 2

0

如我所见,您已经连接

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)
于 2012-09-25T07:24:41.347 回答
0

尽管运行 ls,pwd 工作正常,但使用此函数运行 monekyrunner 不起作用。

conn.modules.subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL
/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

下面的代码块解决了我的问题:

导入 rpyc

导入子进程

conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)

conn.execute ("打印'你好'")

conn.modules.os.popen("monkeyrunner -v ALL MYSCRIPT.py",)

希望这对那些遇到与我相同问题的人有所帮助。

于 2012-09-26T02:08:37.933 回答