我有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
答案 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文件。