从python脚本并行运行bash脚本

时间:2016-03-17 21:43:14

标签: python bash parallel-processing

我在python中遇到问题:

我的脚本,在某个时刻,必须运行一些用bash编写的测试脚本,我必须并行执行,并等到它们结束。 我已经尝试过了:

os.system("./script.sh &")

在for循环中,但它没有用。

有什么建议吗?

谢谢!

修改

我没有正确解释我的情况: 我的植物脚本位于家庭目录中; 我的sh脚本驻留在其他目录中,例如/ tests / folder1和/ tests / folder2;

尝试使用os.system意味着在调用os.system之前使用os.chdir(为了避免麻烦#34;没有这样的文件或目录",我的.sh脚本包含一些相关的引用),而且这种方法阻止了我的终端输出。

尝试使用Popen并将所有路径从home文件夹传递到我的.sh导致启动僵尸进程而没有任何响应或其他。

希望找到解决方案,

谢谢你们!

2 个答案:

答案 0 :(得分:1)

你看过subprocess了吗?便利函数callcheck_output会阻止,但默认Popen对象不会:

processes = []
processes.append(subprocess.Popen(['script.sh']))
processes.append(subprocess.Popen(['script2.sh']))
...

return_codes = [p.wait() for p in processes]

答案 1 :(得分:1)

你能使用GNU Parallel吗?

ls test_scripts*.sh | parallel

或者:

parallel ::: script1.sh script2.sh ... script100.sh

GNU Parallel是一个通用的并行程序,可以很容易地在同一台机器上或在你有ssh访问权限的多台机器上并行运行作业。它通常可以替换for循环。

如果要在4个CPU上运行32个不同的作业,并行化的直接方法是在每个CPU上运行8个作业:

Simple scheduling

GNU Parallel会在完成后生成一个新进程 - 保持CPU处于活动状态,从而节省时间:

GNU Parallel scheduling

<强>安装

如果没有为您的发行版打包GNU Parallel,您可以进行个人安装,不需要root访问权限。这可以在10秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有关其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解详情

查看更多示例:http://www.gnu.org/software/parallel/man.html

观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

完成教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel