我在Windows 10中引入的Linux子系统中编译了一个程序。如何使用python subprocess命令来调用它?默认情况下,subprocess命令似乎使用windows shell而不是linux subsytem
这是一个示例程序(请记住,当我通过Windows python anaconda解释器运行它时),我确实安装了linux subsytem
import subprocess
subprocess.Popen('ls', shell=False)
导致错误:
Traceback (most recent call last):
File "C:\Users\rt\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-3-cf9f6642ea11>", line 1, in <module>
subprocess.Popen('ls', shell=False)
File "C:\Users\rt\Anaconda3\lib\subprocess.py", line 709, in __init__
restore_signals, start_new_session)
File "C:\Users\rt\Anaconda3\lib\subprocess.py", line 997, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
答案 0 :(得分:1)
subprocess
使用CreateProcess
在Windows上运行程序。如果使用shell=True
,它会在命令前面添加cmd.exe
,以便通过Windows命令解释程序运行,而不是直接执行。您可以使用适用于Linux的Windows子系统玩同一游戏。它使用wsl.exe
与cmd.exe
非常相似。因此,使用shell=False
(默认值),您可以
Popen("wsl.exe " + "my_command param1 param2")
或
Popen(["wsl.exe"] + ["my_command", "param1", "param2"])