【发布时间】:2016-06-12 11:24:50
【问题描述】:
我对 shell 脚本很陌生。 我必须使用 Python 执行 shell 脚本。 shell 脚本的顺序很重要。 这是我的示例 Python 代码
import subprocess
import os
script1= "scripts/script1.sh"
script2 = "scripts/script2.sh"
script3 = "scripts/script3.sh"
subprocess.call([script1])
subprocess.call([script2])
subprocess.call([script3])
问题在于上面的代码所有脚本都一个接一个地单独执行,但我想在一个进程下运行所有脚本。
例如,script2 和 script3 应该在脚本 1 运行时执行。
【问题讨论】:
-
“在一个进程下”如何表示“在另一个脚本运行时执行”?这些似乎完全矛盾。如果您想同时运行它们,如何保持顺序?
-
@Daniel Roseman 是的,“在一个进程下”我的意思是“script2 和 script3 在 script1 运行时运行”。实际上,在我的实现中,script1 打开了一个调试程序的 GUI,该程序正在等待 script2 执行的一些命令。
-
你应该澄清你的问题。 shell 脚本始终是一个单独的进程。您可以运行多个并发进程,方法是在后台运行一些进程(这是一个交互式 shell 概念——它基本上意味着 fork 并且不要等待),或者使用管道。
subprocess.call()等待进程完成,但底层的Popen将启动任意数量的进程而无需等待,除非您特别要求。 -
@tripleee 是的,在我使用
subprocess.Popen([script1])启动 script1 后它起作用了,它将 script1 作为后台进程运行。谢谢 -
"under one process" 听起来你想启动一个shell进程和
source所有给定的脚本。如果您的意思是同时运行(“当脚本运行时”),那么它是 stackoverflow.com/q/14533458/4279 的副本,如果不是您想要的,请发表评论。
标签: python subprocess popen