2012-09-25 128 views
2

我需要在远程机器上运行monkeyrunner脚本。我使用python来自动化它和RPyC,这样我就可以连接到其他机器,一切都在CentOS中运行。为什么monkeyrunner从远程机器运行时无法工作?

下面写的是我用过的命令:

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

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

帮助!

+0

为什么不只是$ ssh user @ server/opt/android-sdk/tools/monkeyrunner -v所有/opt/android-sdk/tools/MYSCRIPT.py –

回答

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) 
+0

它还没有工作,结果与第一个相同我尝试过的一组命令。 –

+0

你真的在远程机器上有这个脚本文件吗? – Arseniy

+0

是的。我手动检查了好几次。我使用find和locate命令来了解它是否能够在远程机器中查找文件,但是这些命令也给我错误信息。 –

0

使用此功能来运行monekyrunner不尽管运行ls,pwd工作正常。

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

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

import rpyc

import subprocess , os

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

conn.execute ("print 'Hello'")

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

希望这有助于那些谁遇到同样的问题,因为我的。

相关问题