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

时间:2016-11-21 18:52:29

标签: java python subprocess 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' 

最终,运行解析器程序将需要一系列命令来调用Java程序;在我进行故障排除时,我只是使用简化的python程序作为替身。我认为我的问题是我没有正确地从subprocess.call函数调用参数,但是我无法对文档做出正面或反面。最初我使用os.chdir从一个目录移动到另一个目录并返回,这一直很好,直到它中断os.walk到下一个目录。如何在不破坏我的os.walk原始目录的情况下运行一系列命令来调用另一个目录中的文件? THX

1 个答案:

答案 0 :(得分:0)

正如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()是用于大多数调用的更好功能。