【问题标题】:Unable to run call subprocess method using python 3.2无法使用 python 3.2 运行调用子进程方法
【发布时间】:2013-06-22 08:58:46
【问题描述】:

我安装了 Python 3.2,并且我正在尝试使用 subprocess 模块,但我不断收到错误消息。

我使用的代码是:

import subprocess
subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)

我不断收到subprocess.check_output(["echo", "Hello World!"]) 的以下错误

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    subprocess.check_output(["echo", "Hello World!"])
  File "C:\Python32\lib\subprocess.py", line 514, in check_output
    process = Popen(*popenargs, stdout=PIPE, **kwargs)
  File "C:\Python32\lib\subprocess.py", line 744, in __init__
    restore_signals, start_new_session)
  File "C:\Python32\lib\subprocess.py", line 977, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

对于subprocess.check_output("exit 1", shell=True) 行,我收到以下错误:

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    subprocess.check_output("exit 1", shell=True)
  File "C:\Python32\lib\subprocess.py", line 521, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

【问题讨论】:

  • 第二个非常清楚:告诉 shell 以状态 1 退出,并使用check_output(),它会在非零退出代码时引发异常。

标签: python command-line subprocess


【解决方案1】:

据我所知,subprocess 不是问题——问题是 PATH 上有名为 echono 可执行文件:

WindowsError: [Error 2] The system cannot find the file specified

我的猜测echo 是一个Windows Shell 内部命令。尝试使用shell=True 启动它:

subprocess.check_output(["echo", "Hello World!"], shell=True)

如果您想调用可执行程序(“.exe”),则不需要 shell。只需传递程序的名称和可选参数:

subprocess.check_output(["notepad.exe", "file.txt"])

顺便说一句,你想用这条线做什么:

subprocess.check_output("exit 1", shell=True)

这只会启动一个子shell,要求它立即以非零状态码退出?!?

【讨论】:

  • 我只是按照他们在 python 网站上的示例代码,感谢 subprocess.check_output(["echo", "Hello World!"], shell=True) 似乎工作得很好,也传参时你知道调用命令exe吗
  • @Rohit 我不习惯 Windows,但我已经编辑了我的答案,向您展示如何启动“notepad.exe”。这应该工作。如果没有,请告诉我。
  • 感谢 sylvain,启动记事本似乎工作正常,但我正在尝试使用一些参数调用命令 exe,然后我必须等到它连接到某个服务器,然后传入登录名并密码,然后将命令 exe 的输出通过管道传输到文件。
  • 但是您提供的答案非常适合我提出的问题。谢谢
猜你喜欢
  • 2016-12-02
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2016-06-13
  • 2021-01-05
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多