python报错return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
时间: 2023-05-21 07:05:51 浏览: 392
subprocess.CalledProcessError: Command '('ls', '-l')' returned non-zero exit status 2.
这个错误通常是因为执行的命令返回了非零退出状态,并且使用了参数 check=True,表示如果非零退出状态,则抛出 CalledProcessError 异常。可能的解决办法是检查执行的命令和参数是否正确,并且确认命令能在当前环境下正确运行。
相关问题
Traceback (most recent call last): File "D:/yolov7-lpr/yolov7_plate-master/detect.py", line 196, in <module> check_requirements(exclude=('tensorboard', 'pycocotools', 'thop')) File "D:\yolov7-lpr\yolov7_plate-master\utils\general.py", line 121, in check_requirements print(subprocess.check_output(f"pip install '{r}'", shell=True).decode()) File "D:\Anaconda\lib\subprocess.py", line 415, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, File "D:\Anaconda\lib\subprocess.py", line 516, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command 'pip install 'onnx>=1.8.1'' returned non-zero exit status 105.
这个错误是由于安装 onnx 包时出现了问题。可能是网络连接问题导致安装失败。建议您检查网络连接并重新运行命令。如果问题仍然存在,您可以尝试手动安装 onnx 包。您可以使用以下命令手动安装 onnx 包:
```
pip install onnx==1.8.1
```
如果您使用的是 conda 环境,可以使用以下命令:
```
conda install -c conda-forge onnx==1.8.1
```
希望这可以帮助您解决问题。
Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
`Popen` 函数用于在子进程中执行命令并返回进程对象[^1]。当 `shell=True` 参数被设置时,它会以shell方式执行命令,允许执行更复杂的命令语法。`stdout=subprocess.PIPE` 和 `stderr=subprocess.PIPE` 表示我们将捕获标准输出(stdout)和错误输出(stderr),以便后续处理。
下面是一个简单的演示,展示了如何创建一个子进程来运行一个命令,并接收其输出:
```python
cmd = "ls -l" # 假设我们要列出当前目录的内容
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 等待子进程完成
p.wait()
# 读取标准输出
stdout_data = p.stdout.read().decode()
print(f"Standard output: {stdout_data}")
# 读取错误输出(通常很少用到,因为如果命令成功,错误会被重定向到stdout)
stderr_data = p.stderr.read().decode()
print(f"Standard error: {stderr_data}")
```
在这个例子中,`p.wait()` 是为了让主程序等待子进程结束,然后我们可以通过 `.stdout.read()` 和 `.stderr.read()` 来获取它们的输出。
阅读全文