【问题标题】:subprocess.call on Windows isn't launching the second file [duplicate]Windows 上的 subprocess.call 未启动第二个文件 [重复]
【发布时间】:2013-03-09 11:51:53
【问题描述】:

我正在调整我在 Linux 上为 Win 7 编写的代码。

在 Linux 上是:

subprocess.call(['./myscript.py', arg1, arg2, arg3])

它是从 Shell 启动的,一切正常。 对于 Windows(我使用 Idle 中的 Python),我做到了:

subprocess.call(['myscript.py', arg1, arg2, arg3],  shell=True)

它似乎没有启动任何东西,但没有给我任何错误。我尝试使用 pdb.set_trace() 调试该函数,但 myscript.py 中的检查点没有显示出来。

【问题讨论】:

  • 为什么要在那里使用shell=True
  • 否则我会收到错误 193:%1 不是有效的 Win32 应用程序
  • 我认为在 linux 中它是一个可执行文件,因此是 ./myscript.py。在 Windows 中,它很可能不是。以某种方式使用python myscript.py
  • 如果我将其设置为 subprocess.Popen(['python myscript.py', 'arg1'], shell=True) 它也不会启动任何东西而不给出任何错误。更重要的是,如果我给出错误的文件名,它也不会识别任何错误。
  • 当然它不会启动任何东西,你必须输入python的完整路径。检查@MartijnPieters 发布的问题。它会解决你的问题。

标签: python windows subprocess


【解决方案1】:

与 cmets 和链接问题一样,在 Windows 中,您不能简单地执行 python 脚本,还需要提供 python 可执行文件的路径。由于您已经在使用 python,您可以通过 sys.executable 找到可执行文件的位置

import sys

p = subprocess.Popen([sys.executable, 'myscript.py', arg1, arg2, arg3])

输出正在通过管道传输到 stderrstdout - 要查看它,您还需要 communicate

(stdoutdata, stderrdata) = p.communicate()

print stdoutdata, 
print stderrdata

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2011-03-02
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2019-04-07
    • 2011-02-05
    相关资源
    最近更新 更多