“mode”不在python 3.5子进程

时间:2016-07-25 20:53:06

标签: python-3.x subprocess

我在处理自动化项目时遇到了一些难题。

当我尝试跑步时:

program = subprocess.run("mode")

我明白了:

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

但是,当我用ipconfig替换模式时:

program = subprocess.run("ipconfig")

它运行得非常好。

有人得到解释吗?我目前正在使用批处理文件来运行mode命令,但我想在不编辑批处理文件的情况下更改参数。

编辑1:

我也尝试过使用os.system:

os.system("mode")

这也有效。

编辑2:

现在我只想回答原来的问题,只是为了了解发生了什么。

1 个答案:

答案 0 :(得分:1)

Actual meaning of 'shell=True' in subprocess中,它几乎说shell=True是你应该回避的东西。

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

在您的子流程调用中,您可能希望shell=True让我感到惊讶。如果找不到该文件,则意味着以下两种情况之一:

  1. 它不在你的道路上。
  2. 例如,在Linux中:

    $ which echo
    echo: shell built-in command
    

    很明显,没有echo文件。它只是一个内置于shell中的命令。对于Windows上的mode,此可能是相同的。虽然this site似乎表明它是MODE.COM文件。您可以尝试调用 ,如

    subprocess.run('MODE.COM')
    

    这可能有用 - 至少根据我链接到<{p>}的the answers之一

      

    通过shell调用允许您根据shell的常用机制扩展环境变量和文件globs。在POSIX系统上,shell将文件globs扩展为文件列表。在Windows上,无论如何都不会通过shell扩展文件glob(例如&#34; &#34;)(但命令行上的环境变量由cmd.exe扩展)。

    所以在你的情况下,也许mode不是文件,但是MODE.COM ,而且由于Windows与套管有一个不稳定的关系,似乎可能通过传递shell=True,Windows shell很乐意接受mode并将其转换为MODE.COM,但如果没有它,它会尝试执行名为mode的文件,该文件不会#39; t存在。