Есть ли простой способ запуска Python script в Windows/Linux/OS X?
В последних двух, 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: прецедент неясен. Зачем использовать подпроцесс для запуска python script? Есть ли что-то, препятствующее вам импортировать script и вызывая необходимую функцию?
Я писал быстрый script для проверки общей функциональности инструмента командной строки Python (чтобы протестировать его на разных платформах). В основном это должно было создать кучу файлов в папке temp, запустить script на этом и проверить, что файлы были переименованы правильно.
Я мог бы импортировать script и вызывать функцию, но поскольку он полагается на sys.argv
и использует sys.exit()
, мне нужно было бы сделать что-то вроде.
import sys
import tvnamer
sys.argv.append("-b", "/the/folder")
try:
tvnamer.main()
except BaseException, errormsg:
print type(errormsg)
Кроме того, я хотел захватить stdout и stderr для отладки, если что-то пошло не так.
Конечно, лучшим способом было бы написать script более подверженным тестированию, но script в основном "сделан", и я делаю окончательную партию тестирования перед выпуском версии 1.0 (после чего я собираюсь сделать переписывание/реструктуризацию, которая будет намного более аккуратной и более проверяемой)
В принципе, было проще просто запустить script как процесс, после нахождения переменной sys.executable
. Я бы написал это как оболочку script, но это не было бы кросс-платформенным. Окончательный script можно найти здесь