使用python 3 subprocess模块的函数会抛出错误

问题描述 投票:0回答:2

代码:-

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。


请用通俗的语言解释一下。谢谢。

python python-3.x subprocess
2个回答
1
投票

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


0
投票

我也在 SPyder 中使用过它并且它运行正常,我唯一关心的(因为我也是新手)是为什么控制台要求您输入新日期。但无论如何它都有效...

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

输出(西班牙语):

La fecha actual es: jue. 27/07/2023 
Escriba la nueva fecha: (dd-mm-aa)

第一行告诉您日期,第二行要求您输入新日期,如上所述。

© www.soinside.com 2019 - 2024. All rights reserved.