在Python中在for循环内顺序执行bash命令
我想在Python中用一个for循环依次运行两个bash命令。我的循环代码如下:
for dataset in data:
subprocess.call("cd " +dataset+'.matrix',shell=True)
subprocess.call("cat part-r-* > combined_output", shell=True)
但是这样的话,每个命令都是独立执行的。我希望它们能够一个接一个地执行。我对subprocess模块不太熟悉(我也试过用os.system)。我查了一些网上的文档,但感觉没什么用。希望能得到一些帮助,提前谢谢大家!
2 个回答
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)
3
我觉得它们并不是同时运行的,而是各自处在不同的子进程中,这些子进程都继承了父进程的工作目录。所以,它确实是在等cd
命令完成,但执行了cd
的那个子进程之后就消失了。
幸运的是,在这种情况下,你可以通过使用cwd
参数来指定在不同的目录下运行命令,这样就不需要使用cd
了:
for dataset in data:
subprocess.call("cat part-r-* > combined_output",shell=True,cwd=dataset+'.matrix')