为什么monkeyrunner从远程机器运行时不工作?

时间:2012-09-25 07:20:12

标签: android python centos monkeyrunner rpyc

我需要在远程计算机上运行monkeyrunner脚本。我正在使用python来自动化它和RPyC以便我可以连接到其他机器,一切都在CentOS中运行。

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

  

导入rpyc

     

导入子流程

     

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)

这就是结果:

  

无法打开指定的脚本文件

     

用法:monkeyrunner [option] script_file

     

-s MonkeyServer IP地址

     

-p MonkeyServer TCP端口

     

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

并给我这个错误消息

  

=======远程追踪=======追踪(最近一次呼叫最后):文件   “/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))文件“/usr/lib/python2.4/subprocess.py”,第542行, init       errread,errwrite)文件“/usr/lib/python2.4/subprocess.py”,第975行,在_execute_child中       raise 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中       return 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中       提出obj OSError:[Errno 2]没有这样的文件或目录

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

帮助!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

使用此函数运行monekyrunner不起作用,虽然运行ls,pwd工作正常。

  

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

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

  

导入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”,)

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