【问题标题】:Python subprocess calling a modulePython 子进程调用模块
【发布时间】:2013-06-25 07:02:32
【问题描述】:

我有 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

【问题讨论】:

    标签: python


    【解决方案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'])
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-26
          • 1970-01-01
          • 1970-01-01
          • 2020-05-02
          • 2014-03-30
          • 1970-01-01
          • 2014-05-20
          • 1970-01-01
          相关资源
          最近更新 更多