Python子进程调用模块

时间:2013-06-27 16:50:12

标签: python

我有2个模块test1.py& test2.py并且都位于c:/ python27下,从test1.py,我试图调用test.py,如下所示,但是我收到一个错误。

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

3 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:1)

我认为这里的问题是subprocess启动了一个全新的子shell,一个可能与你习惯工作的shell有很大差别。不确定它是如何适用于windows的,但是例如在unix中,默认情况下,子进程将使用/bin/sh,这是一个功能较少的更简单的shell。我猜你的Windows机器上使用的默认shell subprocess不知道如何处理.py。最好像其他人提到的那样明确指定解释器。

这可能是一个很好的解决方案:https://stackoverflow.com/a/912847/1583239

答案 2 :(得分:-2)

请注意,必须使用python命令运行python脚本。

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

Window不知道如何运行.py文件。