2013-06-27 7 views
0

У меня есть 2 модуля test1.py & test2.py и оба находятся в каталоге c:/python27, From test1.py, Im пытается вызвать test.py, как показано ниже, но я получаю сообщение об ошибке.Подпроцесс Python, вызывающий модуль

Test1.py

import subprocess 
print 'Im in module-1' 

subprocess.Popen('c:/python27/test2.py') 

test2.py

print 'Im in module-2' 

Ошибка: -

C:\Python27>python test1.py 
Im in module-1 
Traceback (most recent call last): 
    File "test1.py", line 4, in <module> 
    subprocess.Popen('c:/python27/test2.py') 
    File "C:\Python27\lib\subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "C:\Python27\lib\subprocess.py", line 896, in _execute_child 
    startupinfo) 
WindowsError: [Error 193] %1 is not a valid Win32 application 

ответ

-2

Обратите внимание, что питон сценарии должны быть запущены с помощью команды питона.

c:>python 'c:/python27/test2.py' 

Окно не умеет запускать .py файлы.

+0

Если вы установите переменную пути вы можете запустить его, как показано выше .. – user1050619

1

Если переменная окружения установлена, то попробуйте следующее:

import subprocess 
print 'Im in module-1' 
subprocess.Popen(['python','c:/python27/test2.py']) 

Если переменная окружения не установлена, то используйте sys.executable:

import sys 
subprocess.Popen([sys.executable,'c:/python27/test2.py']) 

Если вы хотите, чтобы проверить вывод затем использовать subprocess.check_output:

print subprocess.check_output(['python','c:/python27/test2.py']) 
0

Я думаю, проблема в том, что subprocess запускает новую подоболочку, которая может значительно отличаться от оболочки, с которой вы привыкли работать. Не уверен, как все это работает для окон, но, например, в unix, подпроцесс будет использовать по умолчанию /bin/sh, что является более простой оболочкой с меньшим количеством функции. Я предполагаю, что по умолчанию оболочка subprocess использует на вашем компьютере Windows не знает, что делать с .py. Лучше всего указать интерпретатор явно, как упомянули другие.

Это может быть хорошим решением для вас: https://stackoverflow.com/a/912847/1583239