python - 使用 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))
但是当运行时,上面的代码导致控制台长时间运行,我必须手动终止它(不在控制台上打印任何内容)。(为什么??)
我用谷歌搜索了很多,并阅读了一些类似类型的问题,有这种错误......但无法帮助自己:例如这个线程。
这是什么 [WinError 2] ,是什么导致了这个错误?
FileNotFoundError ,这个程序指的是什么文件?
在执行使用子进程模块的程序之前,是否需要满足任何与操作系统/系统相关的先决条件?
我正在使用 Windows 10,Spyder IDE(未安装在 C 驱动器中,但在 D 驱动器中)具有最新版本的 python。
请外行解释。谢谢。
解决方案
尝试在 CMD 终端上运行日期,它会提示您输入新日期,这就是导致您的子进程无限期挂起的原因。您对此命令使用 shell=True 是正确的。使用 shell 会扩展您的环境变量和可用的文件 glob 列表(这就是 win32 错误的含义)。由于这里的 date 是一个特定的 windows 命令,因此您需要 shell。使用 shell=True 也取决于平台,因此您可能需要检查您尝试执行的命令。
推荐阅读
- scala - 在scala中同时导入ExecutionContext.global和ExecutionContext.Implicits.global
- spring-boot - 带有文件控制的表单数据未上传
- php - 合并数组并删除重复值
- c# - C# 使用 XMLReader 类 f 获取 XML 子节点值
- corda - `No corda-webserver JAR found.` 部署 Corda 节点时出错
- css - 外部样式不覆盖 Shadow DOM 样式
- php - 当我使用显示帖子类别时
- 标记它的工作但是当我试图在选择框中显示帖子类别时它不起作用
- ruby-on-rails - Rails - SSL 不适用于裸域
- ios - 我的 UITapGestureRecognizer 不工作
- c# - HttpPut 属性方法不会进行模型绑定