在Python中在for循环内顺序执行bash命令

0 投票
2 回答
3483 浏览
提问于 2025-04-18 12:27

我想在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')

撰写回答