远程服务状态的subprocess.check_output

问题描述 投票:0回答:1

我想检查

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
一起正常工作?

python-3.x subprocess systemctl sshpass
1个回答
0
投票

我通过将

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
是执行命令的通用方法...

© www.soinside.com 2019 - 2024. All rights reserved.