【发布时间】:2015-12-05 02:58:18
【问题描述】:
我正在使用如下所示的一段代码调用另一个程序:
import subprocess
lc="/package/bin/program --do stuff"
command_list = lc.split()
ljs=subprocess.Popen(command_list,stdout=subprocess.PIPE)
ljs.communicate()[0]
字符串在 UNIX 命令行中运行良好,代码在 Python 2.7 中运行。但是,在 Python 3.4 中,我收到如下错误:
File "/package/bin/program", line 2, in <module>
from package import module
ImportError: No module named package
"/package/bin/program" 在这里从包中的另一个文件调用依赖项,我认为这是核心问题。我调用了在 3.4 中运行良好的其他程序。
3.4 中的哪些更改可能导致此问题?
(对于神秘的代码,提前抱歉 - 我正在调用公司内部工具,我不能在这里公开)。
【问题讨论】:
-
文件
bin/program是否存在于当前工作目录中? -
我假设
bin/program是python 2.7 应用程序?也许您传递给子进程的环境中有一些东西导致它在 3.4 路径中查找模块。检查os.environ中的内容,尤其是 PYTHONPATH。您还可以查看bin/package中的第一行,看看它的“shebang”是否指向正确的 python。 -
哦,我假设您不是在虚拟环境中执行此操作?
-
@falsetru 不,但我正在调用整个路径。更新帖子。
-
@tdelaney 你是对的,目标应用程序是 2.7。让我深入研究一下。谢谢!
标签: python python-2.7 python-3.x subprocess