在Python中的一个进程下运行shell脚本

问题描述:

我对shell脚本很陌生。 我必须使用Python执行shell脚本。 shell脚本的顺序很重要。 这是我的例子Python代码在Python中的一个进程下运行shell脚本

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

“一个进程下”是指“在另一个脚本运行时执行”?这些看起来完全矛盾。如果你想同时运行它们,你如何保持秩序? –

+0

@丹尼尔罗斯曼是由“在一个进程下”我的意思是“脚本2和脚本3在脚本1运行时运行”。实际上,在我的实现中,script1打开一个调试程序的GUI,并且该程序正在等待一些由script2执行的命令。 – user3159610

+0

你应该澄清你的问题。一个shell脚本总是一个独立的进程。通过在后台运行一些进程(这是一个交互式shell概念 - 基本上意思是fork,不用等),或者通过使用管道,您可以运行多个并发进程。 'subprocess.call()'等待一个进程完成,但是底层的'Popen'将会像你喜欢的那样启动尽可能多的进程而不用等待,除非你明确地要求它。 – tripleee

好像你需要并行进程。看看多处理模块。下面是一些很好的例子:[https://pymotw.com/2/multiprocessing/basics.html][1]

尽管OP显然拒绝澄清他的问题,但他留下了一条评论,表示他正在寻找subprocess.Popen()

procs = [] 
for cmd in ['scripts/script1.sh', 'scripts/script2.sh', 'scripts/script3.sh']: 
    procs.append(subprocess.Popen([cmd])) 

您应该最终为您开始的流程wait