python:为什么用子进程调用echo会返回WindowsError2?

python:为什么用子进程调用echo会返回WindowsError2?,python,windows,subprocess,Python,Windows,Subprocess,在我的程序中,我有一个函数runScript(): 我在Python文档中看到了许多类似的例子,所以我认为这是可行的。但是,当我在程序中调用此函数时,它返回一个WindowsError WindowsError: [Error 2] The system cannot find the file specified 为什么会发生这种情况?如何修复它?Windows shell中内置了echo命令,cmd.exe。它不是一个可以在没有shell的情况下调用的外部程序。因此,您的子流程.call(

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

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

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

为什么会发生这种情况?如何修复它?

Windows shell中内置了
echo
命令,
cmd.exe
。它不是一个可以在没有shell的情况下调用的外部程序。因此,您的
子流程.call()
需要指定
shell=True

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

(另外,shell将为您处理分割命令的操作,因此我使用了传递命令的更简单的单字符串样式。)

echo是一个linux命令。在linux机器上运行此命令,它将完美地工作。@Flo它也是一个Windows shell命令。@JoeFish确实如此。我的错误。阅读kindall的答案很有意义。我不知道我为什么这么说。也许我想让linux更具排他性P@flo如果这能让你感觉更好的话,我一开始也这么想,但在发布之前打开了一个Windows shell并尝试了一下:)@JoeFish我在linux上:)是的,我以前就这样尝试过,效果不错。然而,我的原始答案中列出的方法是Python网站上列出的方法。这是因为他们指的是Linux
echo
,而不是Windows
echo
echo
是Linux上的一个外部命令,是的(尽管为了性能,有些shell也有内部版本)。我想不管是谁写的都没有考虑Windows!
subprocess.call('echo hello', shell=True)