所以正如标题所说,我在 Fedora 下启动一个新的子进程时遇到了问题。现在的情况是,我有一个主要的 python 脚本,我从中使用以下方法启动其他几个 python 进程:
import subprocess
subprocess.Popen(['python', '-m', 'first_child.run', 'start'], shell=False)
现在这在MacOS,debian和Windows上工作正常。在 Fedora 上,如果我从 Aptana 3 IDE 运行它,它也可以工作,唯一的问题是当我尝试从终端运行这个主脚本时,我得到:
OSError: [Errno 2] No such file or directory
你有什么想法吗?
问候波格丹
如果您已经想到了这一点 - 但是OSError从调用子进程的最常见原因是它找不到进程
http://docs.python.org/library/subprocess.html#exceptions
你绝对确定蟒蛇在你的道路上吗?
我知道你可能会指出你从python可执行文件运行了这个脚本 - 但我想我会试一试,也许当你从终端运行python时,你指定了python的完整路径。
为了好玩,在调用子进程之前,您可以转储您的 PATH
import os
print os.environ['PATH']
这是您当前的工作目录。我不认为问题在于它找不到python,问题是它找不到first_child.run
。
在启动子流程之前尝试打印os.getcwd()
,看看终端和 IDE 中是否有不同。
附带说明一下,使用 sys.executable
作为您在子流程中使用的 python 可能更可靠,而不是仅仅说 python。例如,subprocess.Popen([sys.executable, '-m', 'first_child.run', 'start'], shell=False)