在Python中循环执行bash命令for循环

时间:2014-07-08 08:42:53

标签: python bash

我试图在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)。我在网上浏览了一些文档,但它们并不是很有用。任何帮助都将不胜感激。提前谢谢!

2 个答案:

答案 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)