我在python中遇到问题:
我的脚本,在某个时刻,必须运行一些用bash编写的测试脚本,我必须并行执行,并等到它们结束。 我已经尝试过了:
os.system("./script.sh &")
在for循环中,但它没有用。
有什么建议吗?
谢谢!
修改
我没有正确解释我的情况: 我的植物脚本位于家庭目录中; 我的sh脚本驻留在其他目录中,例如/ tests / folder1和/ tests / folder2;
尝试使用os.system意味着在调用os.system之前使用os.chdir(为了避免麻烦#34;没有这样的文件或目录",我的.sh脚本包含一些相关的引用),而且这种方法阻止了我的终端输出。
尝试使用Popen并将所有路径从home文件夹传递到我的.sh导致启动僵尸进程而没有任何响应或其他。
希望找到解决方案,
谢谢你们!
答案 0 :(得分:1)
你看过subprocess了吗?便利函数call
和check_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个作业:
GNU Parallel会在完成后生成一个新进程 - 保持CPU处于活动状态,从而节省时间:
<强>安装强>
如果没有为您的发行版打包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