以下代码在Windows中正常工作:
subprocess.Popen([PATH_TO_G++]/g++ file.cpp -o file.exe)
但是在Linux中我收到以下错误:
OSError:[Errno 2]没有这样的文件或目录
在阅读了文档和几个SO线程之后,我发现subprocess.Popen在Windows和nix系统中的工作方式不同。在Windows中,它将字符串作为参数并启动它,就像您在终端中启动它一样。
在linux中,如果你有参数,它需要一个字符串列表。第一个值是程序本身,然后去属性。您可以通过传递Shell = True参数使其行为像Windows一样,但这对我来说不是一个好的解决方案。
我尝试了shlex.split功能,但它仍无效。
答案 0 :(得分:4)
根据您的示例,您需要确保命令被正确引用:
subprocess.Popen([PATH_TO_G++ + "/g++", "file.cpp", "-o", "file.exe"])
PATH_TO_G ++没有办法是一个有效的变量名,所以我只是假设你提供了这个例子。
现在,更重要的是,您正在尝试使用子流程做什么?只需启动它并将其作为主要操作?启动它并捕获输出?在后台启动它?
subprocess模块的文档非常清晰,并提供有关如何使用它的a lot of examples。