Python子进程:如何使用与主线程不同的解释器运行python脚本

时间:2014-12-16 23:47:10

标签: python subprocess

我正在运行一个具有嵌入式python解释器的应用程序,它是2.7。我需要运行一个独立的python应用程序作为子进程,但该应用程序只与python 2.6兼容。如何强制python应用程序使用python2.6解释器启动?

2 个答案:

答案 0 :(得分:3)

就像沙丘已经说过的那样:

proc = Popen(['/path/to/executable', '-flag1', '--opt=value'])

可执行文件可以是带有shebang #!/usr/bin/env python2.6的Python脚本,也可以是启动Python2.6解释器的bash脚本。

请注意,解释器不会等待2.6版本完成。您必须使用.wait()方法。否则你的孩子进程就会变成僵尸。

# wait for the process to finish
proc.wait()

如果你想创建一个守护进程 - 意味着一个子进程在父进程被终止时不会终止 - 你需要os.fork()函数。周围有脚本可以为您处理所有的事情 - 例如。 daemonize.py

答案 1 :(得分:2)

  

一些复杂情况,python脚本不是.py脚本,而是包装器bash可执行文件(带#!/ usr / bin / env python2)。

要使用python2.6运行脚本,您可以将其shebang更改为指向python2.6可执行文件:

#!/usr/bin/env python2.6

直接运行脚本:

subprocess.check_call(['/path/to/your_script'] + sys.argv[1:])

sys.argv[1:]用于将命令行参数传递给子脚本。

如果您无法更改shebang,请运行:

subprocess.check_call(['/usr/bin/env', 'python2.6', '/path/to/your_script'] + 
                      sys.argv[1:])