如何检查`subprocess`执行是否成功并处理错误?
时间: 2024-09-06 13:03:29 浏览: 133
在使用`subprocess`模块执行命令时,可以利用其返回值来检查执行是否成功。`subprocess.run()`或`subprocess.check_call()`等方法会在子进程退出时返回一个整数,该数字通常是子进程的退出代码:
1. **`subprocess.run()`**:
- 如果命令执行成功,返回的对象有一个`returncode`属性,值为0表示成功。
- 如果命令失败,`returncode`将是一个非零值,此时你可以通过`if returncode != 0:`来判断并处理错误。
```python
try:
result = subprocess.run(command, capture_output=True)
if result.returncode == 0:
print("Command executed successfully")
else:
print(f"Execution failed with error code: {result.returncode}")
except subprocess.CalledProcessError as e:
print(f"Command failed: {e.stderr.decode()}")
```
2. **`subprocess.check_call()`**:
这个方法会立即终止程序并引发错误如果命令执行失败。所以在调用之前需要确定是否有处理错误的能力。
```python
try:
subprocess.check_call(command)
except subprocess.CalledProcessError as e:
print(f"Command failed with error code: {e.returncode}")
print(f"Error message: {e.output}")
```
记得在处理异常时考虑到可能存在的编码问题,使用`decode()`方法将字节流转换成文本。
阅读全文