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