我试图在Python的for循环中顺序运行2个bash命令。循环如下:
for dataset in data:
subprocess.call("cd " +dataset+'.matrix',shell=True)
subprocess.call("cat part-r-* > combined_output", shell=True)
但是,通过这种方式,每个命令都被认为是彼此独立的。我需要他们一个接一个地执行。我不知道如何很好地使用子进程模块(我也尝试过使用os.system)。我在网上浏览了一些文档,但它们并不是很有用。任何帮助都将不胜感激。提前谢谢!
答案 0 :(得分:3)
我不相信他们会异步(同时)运行,只是他们处于不同的子流程中,每个子流程都会继承父流程'工作目录。所以 等待cd
完成,但是cd
' d的子流程就会消失。
值得庆幸的是,在这种情况下,您可以通过cwd
parameter告诉呼叫在不同的目录中运行,因此您不需要cd
:
for dataset in data:
subprocess.call("cat part-r-* > combined_output",shell=True,cwd=dataset+'.matrix')
答案 1 :(得分:0)
os.system
的示例:
import os
os.system("echo aaa > ~/SOMEFILE1111; cd ~/; cat SOMEFILE1111; rm SOMEFILE1111")
和一个subprocess.call
:
import subprocess
cmds = [ "echo aaa > ~/SOMEFILE1111", "cd ~/",
"cat SOMEFILE1111", "rm SOMEFILE1111"]
subprocess.call(";".join(cmds), shell=True)