我想检查
QEMU实例上
<SERVICE>
的状态(标准连接是 ssh [email protected]
)。
当我这样做时
sshpass -p none ssh -o StrictHostKeyChecking=no [email protected] -t 'systemctl is-active <SERVICE>'
我得到了预期的输出:
failed
如果我尝试使用
subprocess.check_output
与相同
subprocess.check_output("sshpass -p none ssh -o StrictHostKeyChecking=no [email protected] -t 'systemctl is-active <SERVICE>'", shell=True, encoding='utf8', stderr=subprocess.DEVNULL)
我得到了
回溯(最近一次调用):文件“”,第 1 行,in 文件“/usr/lib/python3.8/subprocess.py”,第 415 行,在 check_output 中 返回运行(* popenargs,stdout = PIPE,超时=超时,检查= True,文件 “/usr/lib/python3.8/subprocess.py”,第 516 行,运行中 raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError:命令'sshpass -p none ssh -o StrictHostKeyChecking=no [电子邮件受保护] -t 'systemctl 处于活动状态
'' 返回非零退出状态 3.
但是如果我对任何其他命令使用相同的代码行,例如
subprocess.check_output("sshpass -p none ssh -o StrictHostKeyChecking=no [email protected] -t 'echo $PATH'", shell=True, encoding='utf8', stderr=subprocess.DEVNULL)
我得到了预期的输出:
'/usr/bin:/bin:/usr/sbin:/sbin\n'
那么为什么
subprocess.check_output
不能与 systemctl
一起正常工作?
我通过将
check_output
方法替换为 run
as 来获取服务状态
subprocess.run("sshpass -p none ssh -o StrictHostKeyChecking=no [email protected] -t 'systemctl is-active <SERVICE>'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).stdout
但这看起来更像是一种解决方法,因为
check_output
应该专门用于获取命令输出,而 run
是执行命令的通用方法...