首页 > 解决方案 > 使用 python 3 subprocess 模块的函数会引发错误

问题描述

代码:-

import subprocess
print(subprocess.run(['date']))

运行时:-

Traceback (most recent call last):

File "D:\PyProjects\selenium\0experiment.py", line 8, in <module>
print(subprocess.run(['date']))

File "D:\Users\anaconda3\lib\subprocess.py", line 488, in run
with Popen(*popenargs, **kwargs) as process:

File "D:\Users\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 104, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)

File "D:\Users\anaconda3\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)

File "D:\Users\anaconda3\lib\subprocess.py", line 1207, in _execute_child
startupinfo)

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

我对这些完全陌生,并且正在从在线视频中学习这些东西......导师的相同代码在其中完美运行。 这是视频(1:40)


我也试过这段代码:

import subprocess
print(subprocess.run(['date'], shell=True))

但是当运行时,上面的代码导致控制台长时间运行,我必须手动终止它(不在控制台上打印任何内容)。(为什么??)


我用谷歌搜索了很多,并阅读了一些类似类型的问题,有这种错误......但无法帮助自己:例如这个线程。


请外行解释。谢谢。

标签: pythonpython-3.xsubprocess

解决方案


尝试在 CMD 终端上运行日期,它会提示您输入新日期,这就是导致您的子进程无限期挂起的原因。您对此命令使用 shell=True 是正确的。使用 shell 会扩展您的环境变量和可用的文件 glob 列表(这就是 win32 错误的含义)。由于这里的 date 是一个特定的 windows 命令,因此您需要 shell。使用 shell=True 也取决于平台,因此您可能需要检查您尝试执行的命令。


推荐阅读