Вызывающая программа, скомпилированная с использованием подсистемы Linux через python в Windows - PullRequest
0 голосов
/ 03 мая 2018

У меня есть программа, скомпилированная в подсистеме Linux, представленная в Windows 10. Как я могу использовать команду подпроцесса python для ее вызова? По умолчанию команда subprocess, похоже, использует оболочку Windows, а не подсистему linux

Вот пример программы (помните, что пока я запускаю ее через интерпретатор анаконды Windows Python), у меня установлен подсистема linux

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 голосов
/ 03 мая 2018

subprocess использует CreateProcess для запуска программ в Windows. Если вы используете shell=True, это добавляет cmd.exe в начало вашей команды, так что она запускается через интерпретатор команд Windows вместо прямого выполнения. Вы можете играть в ту же игру с Подсистемой Windows для Linux . Он использует wsl.exe так же, как cmd.exe. Таким образом, с shell=False (по умолчанию) вы можете

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

или

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