为什么子进程在

时间:2017-01-05 20:44:01

标签: shell python-3.x subprocess

所以我想使用

调用Python的shell脚本
from subprocess import call 

在一组具有相同扩展名的文件中,位于不同的目录中。这是我到目前为止所做的:

        for path, subdirs, files in os.walk(dir_path):
            for name in files:
                if name.endswith(".avg"):
                    os.chdir(os.path.join(path))
                    call("shell_script *avg", shell=True)
                    print("creating new file for... " + name)

但它只是一遍又一遍地循环遍历同一组文件,最终在5次迭代后,它将转移到下一组文件并执行相同的操作。我只发现了这个,因为我正在查看内核并看到它一遍又一遍地对相同的文件执行相同的shell脚本。我在哪里错了?

2 个答案:

答案 0 :(得分:1)

call("shell_script *avg", shell=True)shell_script结尾的每个文件调用avg。对于以avg结尾的每个文件,循环执行一次。

答案 1 :(得分:1)

您不断使用os.chdir(os.path.join(path))更改当前工作目录。如果您在dir_path中使用相对路径,那么您将继续更改步行的基础。相反,跳过更改主程序中的目录并将其设置在子进程调用中。此外,您需要传递实际的文件名而不是glob。

for path, subdirs, files in os.walk(dir_path):
    for name in files:
        if name.endswith(".avg"):
            call("shell_script {}".format(name), shell=True, cwd=path)
            print("creating new file for... " + name)