在Python中同时运行多个bash命令

时间:2018-02-09 13:17:26

标签: python bash

我想创建一个可以启动bash脚本的多个实例的python脚本。

我试过了

df.groupBy("group").agg(max("influence").as("max_influence")

但是它会在bashcmd2处停止并且只有在我按下CTRL + C时才会继续。

1 个答案:

答案 0 :(得分:0)

你只是在其中运行一个包含3个命令的bash。

如果命令没有设置变量或相互依赖(否则你将无法并行化它们),也许您可​​以创建3个subprocess.Popen实例:

commands = '''
bashcmd1
bashcmd2
bashcmd3
'''

for process in [subprocess.Popen(['/bin/bash', '-c', line], stdout=subprocess.PIPE) 
                for line in commands.split("\n") if line]:  # filter out blank lines
    out, err = process.communicate() # or just rc = process.wait()
    # print out & err

该命令首先创建Popen对象的列表解析(列表不是生成器,因此进程立即启动),然后执行communicate等待完成(但其他进程同时运行)

好处是你可以将这种技术应用于任何包含命令的脚本,而且你不需要使用shell &功能(更便携,包括Windows,只要你使用{ {1}}前缀代替["cmd","/c"