Python(或MonkeyRunner)如何定位导入的模块?

时间:2013-08-07 23:13:21

标签: android python module monkeyrunner

更新:按照@ 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.pyutil.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:没有名为util

的模块      

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

3 个答案:

答案 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