【问题标题】:why is monkeyrunner not working when run from a remote machine?为什么从远程机器运行时,monkeyrunner 不工作?
【发布时间】: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


【解决方案1】:

使用这个函数运行monekyrunner虽然运行ls,但是pwd没问题。

conn.modules.subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v 全部
/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",)

希望这对遇到和我一样问题的人有所帮助。

【讨论】:

    【解决方案2】:

    我看到你已经连接了

    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)
    

    【讨论】:

    • 还是不行,结果和我试过的第一组命令一样。
    • 远程机器上真的有这个脚本文件吗?
    • 是的。我手动检查了几次。我使用 find 和 locate 命令来了解它是否能够在远程机器中定位文件,但是这些命令也给了我错误消息..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多