我在处理自动化项目时遇到了一些难题。
当我尝试跑步时:
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:
现在我只想回答原来的问题,只是为了了解发生了什么。
答案 0 :(得分:1)
在Actual meaning of 'shell=True' in subprocess中,它几乎说shell=True
是你应该回避的东西。
FileNotFoundError: [WinError 2] The system cannot find the file specified
在您的子流程调用中,您可能希望shell=True
让我感到惊讶。如果找不到该文件,则意味着以下两种情况之一:
例如,在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存在。