运行 os.walk 中间另一个目录中的一个程序

running a program in another directory in the middle of os.walk

我正在使用 os.walk 遍历目录 (dir1)。当我在某些目录中时,我将文件移动到解析器程序所在的不同目录 (dir2)。我正在尝试 运行 dir2 中的解析器程序而不中断对其他目录的遍历。

我目前正在尝试这个:

subprocess.call("python3 parser_program", cwd=parser_location)

在我的演练函数中的适当位置。但是,我收到以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'python3 parserprogram.py' 

最终,运行ning 解析器程序将需要一系列命令来调用 Java 程序;我只是在排除故障时使用简化的 python 程序作为替代。我认为我的问题是我没有从 subprocess.call 函数中正确调用参数,但我无法对文档进行正面或反面的说明。最初我使用 os.chdir 从一个目录移动到另一个目录并返回,并且工作正常,直到它中断了 os.walk 到下一个目录。我如何 运行 一系列命令来调用另一个目录中的文件而不中断我的 os.walk 通过我的原始目录?谢谢

subprocess.run() documentation 中的示例所示,run()call() 的参数需要在列表中:

subprocess.call(['python3', 'parser_program'], cwd=parser_location)

但是,如果您正在使用 shell=True,即通过 shell 传递它,您可以将参数作为单个字符串传递,就像您正在做的那样:

subprocess.call("python3 parser_program", shell=True, cwd=parser_location)

不过,除非您确实需要 shell 功能,否则不建议使用 shell=True

此外,如果您使用的是 Python 3.5+,subprocess.run() 是用于大多数调用的更好的函数。