通过Windows上的python调用使用linux subsytem编译的程序

时间:2018-05-02 22:10:28

标签: python subprocess windows-subsystem-for-linux

我在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

1 个答案:

答案 0 :(得分:1)

subprocess使用CreateProcess在Windows上运行程序。如果使用shell=True,它会在命令前面添加cmd.exe,以便通过Windows命令解释程序运行,而不是直接执行。您可以使用适用于Linux的Windows子系统玩同一游戏。它使用wsl.execmd.exe非常相似。因此,使用shell=False(默认值),您可以

Popen("wsl.exe " + "my_command param1 param2")

Popen(["wsl.exe"] + ["my_command", "param1", "param2"])