我有一个 bash 脚本myscript.sh
:
#!/bin/bash
while read line; do
myprog.py
done
调用python程序myprog.py
#!/usr/bin/env python
import subprocess
output = subprocess.check_output(['ssh', 'user@host', 'cmd'])
子进程调用的ssh命令执行无误,输出正确。但是当像这样调用时,循环myscript.sh
只运行输入的第一行,然后以状态 0 退出。如果我subprocess.check_output(...)
用 a 替换调用subprocess.Popen(...)
并且不随后调用Popen.wait()
,那么外部循环按预期工作,ssh
命令的输出是在 bash 脚本的任何输出之后的一段时间内转储到标准输出。with 的Popen.wait()
行为与 with 相同check_output
:bash 循环在退出之前只经过一次迭代而不会出错。
如果不是调用ssh
另一个命令,例如ls
,check_output
则 bash 循环按预期工作。
谁能帮我理解为什么显示的代码没有按预期工作?
注意:这是我正在尝试做的简化版本,尽管我确实遇到了与此代码相同的行为。实际上,我在 bash 脚本中使用“$line”做一些事情,并且子进程调用包含在try
/except
块中。