python3捕获异常使用subrocess.run
时间: 2024-12-16 16:31:33 浏览: 8
在Python 3中,`subprocess.run()`函数可以用来运行外部命令,同时提供了对异常的处理能力。当你调用`run()`方法时,它会返回一个`CompletedProcess`对象,如果你希望捕获执行过程中的异常,可以在`try-except`块中使用。
下面是一个简单的例子:
```python
import subprocess
def run_command_with_exception_handling(cmd):
try:
# 使用 subprocess.run() 执行命令,设定 capture_output=True 来获取输出,timeout=5 表示设置5秒超时
result = subprocess.run(cmd, shell=True, timeout=5, capture_output=True)
if result.returncode == 0:
print(f"Command '{cmd}' ran successfully.")
print(f"Output: {result.stdout.decode('utf-8')}")
else:
print(f"Command failed with return code {result.returncode}.")
except subprocess.TimeoutExpired:
print(f"Command timed out after {result.timeout} seconds.")
except subprocess.CalledProcessError as e:
print(f"Command '{cmd}' returned non-zero exit status {e.returncode}: {e.output.decode('utf-8')}")
except Exception as e:
print(f"An unexpected error occurred: {str(e)}")
# 使用 run_command_with_exception_handling 函数执行命令
run_command_with_exception_handling("your_command_here")
```
在这个例子中,我们捕捉了`TimeoutExpired`(当命令执行超过指定时间未完成时)、`CalledProcessError`(当命令执行失败时)以及其他所有未明确捕获的异常。根据具体的异常类型,我们可以采取相应的措施,比如记录日志、显示友好的提示或回滚操作等。
阅读全文