Есть две проблемы. Во-первых, 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, выполнив три действия:
- Сделать первую строку hello.py равной
#!/usr/bin/env python
- Отметьте файл hello.py как исполняемый в Linux, выполнив
chmod a+x hello.py
.
Запустить скрипт 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.