import subprocess subprocess.run( "source /home/sqa/PycharmProjects/PythonProject2/scripts/add_robot.sh && fs_add_robot 192.168.101.654", shell=True, executable="/bin/bash" ) 怎么看结果
时间: 2025-06-26 14:28:39 浏览: 14
### 如何捕获 `subprocess.run` 执行 Bash 脚本的输出和返回值
在 Python 中,可以通过设置参数来捕获由 `subprocess.run` 方法执行的 Bash 脚本的输出以及其返回状态码。以下是实现这一目标的具体方法:
#### 设置标准输出和错误输出
为了捕获子进程的标准输出 (`stdout`) 和标准错误输出 (`stderr`),可以在调用 `subprocess.run` 时指定 `stdout=subprocess.PIPE` 和 `stderr=subprocess.PIPE` 参数[^1]。
```python
import subprocess
result = subprocess.run(
["bash", "script.sh"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
print("Standard Output:")
print(result.stdout) # 捕获的标准输出
print("Standard Error:")
print(result.stderr) # 捕获的标准错误输出
print("Return Code:", result.returncode) # 返回的状态码
```
上述代码片段展示了如何通过 `text=True` 将字节数据转换为字符串形式以便于处理,并分别打印标准输出、标准错误输出以及返回的状态码[^2]。
#### 使用 Shell 模式
如果需要直接传递完整的命令行字符串而不是单独的参数列表,则可以启用 `shell=True` 参数。需要注意的是,在这种情况下应特别注意安全性问题以防止注入攻击[^4]。
```python
result = subprocess.run(
"bash script.sh arg1 arg2",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
```
此配置允许更灵活地构建复杂命令序列,但同时也增加了潜在风险,因此仅当确实必要时才推荐使用该选项[^3]。
#### 结果存储至文件
有时可能希望将输出保存到外部文件而非仅仅显示在控制台中。这可通过调整 `stdout` 或者 `stderr` 的指向位置完成:
```python
with open('output.log', 'w') as f_out, open('error.log', 'w') as f_err:
result = subprocess.run(
["bash", "script.sh"],
stdout=f_out,
stderr=f_err
)
print("Execution finished with code:", result.returncode)
```
在这里,我们创建了两个文件句柄用于接收来自子进程的信息流并最终关闭它们;同时仍然能够获取退出状态作为反馈信息的一部分.
---
###
阅读全文
相关推荐


















