Я хочу реализовать Popen-код из Windows в Linux: - PullRequest
1 голос
/ 13 марта 2019

Я хочу реализовать этот код из Windows в Linux:

a=subprocess.Popen(['python.exe','hello.py'])

1 Ответ

0 голосов
/ 13 марта 2019

Есть две проблемы. Во-первых, python.exe в Linux называется просто python, а во-вторых, исполняемый файл python находится не в текущем каталоге, а где-то в системном пути. Чтобы Linux искал python в пути, вы можете либо позволить Popen использовать оболочку:

a=subprocess.Popen(['python','hello.py'], shell=True)

или вы можете использовать программу env, чтобы найти ее:

a=subprocess.Popen(['/usr/bin/env', 'python','hello.py'])

В качестве третьего варианта вы можете использовать метод Linux shebang для запуска сценария hello.py и позволить ассоциациям файлов Windows запускать hello.py в интерпретаторе python, выполнив три действия:

  1. Сделать первую строку hello.py равной #!/usr/bin/env python
  2. Отметьте файл hello.py как исполняемый в Linux, выполнив chmod a+x hello.py.
  3. Запустить скрипт hello.py в оболочке

    a=subprocess.Popen('hello.py', shell=True)

Это заставит скрипт работать одинаково как в Windows, так и в Linux.

Пожалуйста, будьте осторожны со строкой shebang: hello.py необходимо сохранить в соответствии с соглашением о конце строки UNIX, в противном случае вы получите неопределенную ошибку «python not found». Это вызвано дополнительным '\ n', добавленным редактором Windows, позволяющим оболочке искать файл с именем 'python\n' - который, конечно, не существует. Вы можете преобразовать hello.py в конец строки UNIX, используя инструмент dos2unix. Все респектабельные файловые редакторы сохранят окончания строк после установки в UNIX.

...