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