subprocess - shell = False时的FileNotFoundError

时间:2016-10-29 16:30:09

标签: python cmd subprocess

我正在创建一个可以使用subprocess和tkinter在命令提示符下执行的GUI。

    def test_subprocess(self):
        proc = subprocess.Popen(["echo", "Hello"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=False)
        response = proc.communicate()[0]
        self.log.insert("end", response)

如果我设置shell=False,我会收到此错误:

FileNotFoundError: [WinError 2] The system cannot find the file specified

我已经将参数分成了一个序列。

1 个答案:

答案 0 :(得分:3)

这是因为^[是Windows中的内置命令,而不是可执行文件。您 以启用echo以使其正常工作。

(或添加shell前缀,例如shell=Truebash -c,具体取决于您的操作系统)

在Windows上为你提供:有效:

cmd /c

但我认为这只是一项练习,因为从proc = subprocess.Popen(["cmd", "/c", "echo", "Hello"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=False) 开始echo运行对于Popen来说是过度的。)

注意:在Linux / UNIX中它也是内置的,但正如cdarke所说,在某些版本的print中有一个回退可执行文件,因此可行。