【问题标题】:python: why does calling echo with subprocess return WindowsError 2?python:为什么用子进程调用echo会返回WindowsError 2?
【发布时间】:2012-06-11 14:21:53
【问题描述】:

在我的程序中,我有一个函数 runScript():

def runScript():
subprocess.call(['echo', 'hello'])

我在 Python 文档中看到了许多类似的示例,所以我认为这会起作用。但是,当我在程序中调用此函数时,它会返回一个 WindowsError。

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

为什么会这样?我该如何解决?

【问题讨论】:

  • echo 是一个 linux 命令。在 linux 机器上运行它,它将完美运行。
  • @Flo 它也是一个 Windows shell 命令。
  • @JoeFish 确实如此。我的错。阅读kindall的答案很有意义。我不知道为什么我跳出来这么说。也许我希望 linux 更加独特。 :P
  • @flo 如果它让你感觉好些,我一开始也是这么想的,但在发帖前打开了一个 Windows shell 并尝试过 :)
  • @JoeFish 我在一个 linux 机器上 :)

标签: python windows subprocess


【解决方案1】:

echo 命令内置于 Windows shell cmd.exe。它不是没有外壳就可以调用的外部程序。因此,您的subprocess.call() 需要指定shell=True

subprocess.call('echo hello', shell=True)

(另外,shell 会为你处理命令的拆分,所以我使用了更简单的单字符串方式来传递命令。)

【讨论】:

  • 是的,我之前尝试过这种方式,并且有效。但是,我原始答案中列出的方法是 Python 网站上列出的方法。这是因为他们指的是 Linux echo 而不是 Windows echo 吗?
  • echo 是 Linux 上的外部命令,是的(尽管为了性能,一些 shell 也有内部版本)。我认为写这本书的人没有考虑到 Windows!
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 2020-09-26
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多