Есть ли простой способ запуска скрипта Python в Windows/Linux/OS X?Использование подпроцесса для запуска сценария Python в Windows
На двух последних, subprocess.Popen("/the/script.py")
работает, но на Windows я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "test_functional.py", line 91, in test_functional
log = tvnamerifiy(tmp)
File "test_functional.py", line 49, in tvnamerifiy
stdout = PIPE
File "C:\Python26\lib\subprocess.py", line 595, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
startupinfo)
WindowsError: [Error 193] %1 is not a valid Win32 application
monkut's comment: The use case isn't clear. Why use subprocess to run a python script? Is there something preventing you from importing the script and calling the necessary function?
я писал быстрый скрипт для тестирования общей функциональности в Python-команды -line (для тестирования на разных платформах). В основном ему приходилось создавать кучу файлов во временной папке, запускать скрипт на этом и проверять, что файлы были переименованы правильно.
Я мог бы импортирован сценарий и называется функцией, но, поскольку она опирается на sys.argv
и использует sys.exit()
, я нуждался бы сделать что-то вроде ..
import sys
import tvnamer
sys.argv.append("-b", "/the/folder")
try:
tvnamer.main()
except BaseException, errormsg:
print type(errormsg)
Кроме того, я хотел захватить стандартный вывод и stderr для отладки, если что-то пошло не так.
Конечно, лучший способ - написать сценарий с большей степенью тестирования, но сценарий в основном «сделан», и я делаю окончательную партию тестирования перед выпуском «1.0» (после чего Я собираюсь сделать переписывание/реструктуризацию, которая будет намного более сложной и более проверяемой)
В принципе, было легко просто запустить сценарий как процесс, после нахождения переменной sys.executable
. Я бы написал это как shell-скрипт, но это не было бы кросс-платформенным. Окончательный сценарий можно найти here
Вариант использования не ясен. Зачем использовать подпроцесс для запуска скрипта python? Есть ли что-то, препятствующее вам импортировать скрипт и вызывая нужную функцию? – monkut
Имела ту же проблему при запуске модулей nodejs из python. subprocess.call ([r '.. \ nodejs \ npm'], shell = True) решил проблему. – Stefan