更新:按照@ dtmilano的建议,我添加了
import sys
print(sys.path)
到我的MonkeyRunner脚本的开头。这导致
['e:/path/android-sdk/tools/lib/monkeyrunner.jar:e:\\path\\bbct\\android\\functional-tests', 'E:\\path\\android-sdk\\tools\\lib\\Lib', '/E:/path/android-sdk/tools/lib/jython-standalone-2.5.3.jar/Lib', '__classpath__', '__pyclasspath__/']
乍一看,我认为这包括当前的工作目录。但是,仔细检查显示输出是第一个字符串
的字符串列表'e:/path/android-sdk/tools/lib/monkeyrunner.jar:e:\\path\\bbct\\android\\functional-tests'
由于某种原因,这包含两个连接在一起的路径。这是MonekyRunner和/或Jython中的错误吗?
原始问题:我在同一目录中有两个.py文件:screenshots.py
和util.py
。我需要使用Android构建工具中的monkeyrunner
解释器运行screenshots.py。当我运行monkeyrunner screenshots.py
时,我收到错误No module named util
。如何配置我的python和/或monkeyrunner以查找util.py
中的代码?
修改 我在Win7上使用Git Bash。 (哎呀,我可能早就应该提到这个。)
作为参考,这是完整的错误消息:
130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]由于异常而终止脚本
的模块
130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]回溯(最近一次调用最后一次):
文件“c:\ Users \ Dell \ Documents \ dev \ src \ java \ bbct \ android \ functional-tests \ screenshots.py”,第19行,中
import util
ImportError:没有名为util130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.Py.ImportError(Py.java:264)
130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.imp.import_first(imp.java:657) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.imp.import_name(imp.java:741) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.imp.importName(imp.java:791) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.ImportFunction。调用(_ builtin _。java:1236) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.PyObject。调用(PyObject.java:367) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core。内置 ._ 导入 _(内置 .java:1207) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core。内置 ._ 导入 _(内置 .java:1190) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.imp.importOne(imp.java:802) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.pycode._pyx0.f $ 0(c:\ Users \ Dell \ Documents \ dev \ src \ java \ bbct \ android \ functional-tests \ screenshots.py:51) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.pycode._pyx0.call_function(c:\ Users \ Dell \ Documents \ dev \ src \ java \ bbct \ android \ functional-tests \ screenshots.py) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.PyTableCode.call(PyTableCode.java:165) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.PyCode.call(PyCode.java:18) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.Py.runCode(Py.java:1197) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core。内置 .execfile_flags(内置 .java:538) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:156) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77) 130807 12:01:59.978:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
答案 0 :(得分:1)
您需要将模块添加到搜索路径(您的cwd不在同一个目录中吗?)
http://docs.python.org/2/tutorial/modules.html
导入系统 sys.path.append( '/路径/到/你的/模块')
答案 1 :(得分:1)
脚本所在的目录会被sys.path
自动添加到monkeyrunner
(对于其他操作系统,这非常有效,不幸的是,您似乎正在使用其中没有的操作系统)。
然后可以毫无问题地导入脚本的同一目录中存在的其他模块。
也就是说,screenshots.py
应找到utils.py
,因为目录functional-tests
位于sys.path
。
您可以通过
验证其内容import sys
print sys.path
import util
screenshots.py
中的。我的猜测是所有c:\
都在弄乱路径。
答案 2 :(得分:1)
供你参考,android SDK似乎确实有一个错误,其中sys.path上的第一项是monkeyRunner lib和工作目录混合在一起。我添加了以下内容进行修复。
import sys
sys.path.append(sys.path[0].split(':',1)[1])
import util