繁体   English   中英

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

[英]Python subprocess: How to run a python script using a different intepreter than the main thread

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

就像沙丘已经说过的:

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

带来一些并发症,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:])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM