Python 3 subprocess module throws error
Python 3中的这个简单程序抛出错误。原因可能是什么?安装/重新安装Python 3.5/3.6后出现此问题。另外,我的PC(Windows 10计算机)上也安装了Python 2.7。
1 2
| import subprocess
out = subprocess.check_output(['dir']) |
错误消息:
File"C:\Python36\lib\subprocess.py", line 336, in check_output
**kwargs).stdout
File"C:\Python36\lib\subprocess.py", line 403, in run
with Popen(*popenargs, **kwargs) as process:
File"C:\Python36\lib\subprocess.py", line 707, in init
restore_signals, start_new_session)
File"C:\Python36\lib\subprocess.py", line 990, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file
specified
它不是可执行文件,而是内置于shell中。python子进程模块找不到它,所以出现了一个错误。
如果要使用子进程模块,请使用一些现有的二进制文件,例如python、notepad或ping。如果需要列出文件夹内容,请使用os.listdir或os.walk。
似乎"dir"不在您的路径中。我不知道该可执行文件在Windows上的完整路径,但也许您应该用C:windwossystemdir替换dir。
或者最好的解决方案是使用操作系统模块中的函数列出目录:
- 即使替换为c:windwossystemdir,它也会产生相同的错误。基本上,我要做的是为基于shell的实用程序运行一些shell命令。我可以运行下面提到的命令。我不知道在安装/卸载期间发生了什么更改。
1 2 3 4 5 6
| import subprocess cmd_find_nodes=['snap'、'network'、'ping']result=subprocess.check_output(cmd_find_nodes)</li><li>通过添加环境变量解决了这个问题。在path变量中添加了c:python35scripts;c:python35。</li></ul>[/collapse]</div><p><center>[wp_ad_camp_1]</center></p><hr><P>除了@grundic</P><blockquote>
<p>
It's not an executable, but built-in to the shell. [...]
</p>
</blockquote><P>如果您真的想执行cmd内置命令,您必须在您的情况下执行<wyn>cmd.exe /c COMMAND_HERE</wyn>:</P>[cc lang="python"]import subprocess
out = subprocess.check_output(['cmd.exe', '/c', 'dir']) |
/c表示执行后cmd.exe关闭。
- 下面如何:out=subprocess.check_output(['cmd.exe'、'/c'、'snap'、'network'、'ping'])
- 如果要运行非内置命令,但要注意Windows中的,则必须指定到snap的完整路径。例如运行python out = subprocess.check_output(['cmd.exe', '/c', 'C:\\Program Files\\python\\python.exe'])。