为何subprocess.check_output执行远程systemctl命令返回非零退出状态3?
问题:subprocess.check_output调用systemctl命令报错的原因
我需要检查QEMU实例(标准连接方式为ssh root@192.168.7.2)上<SERVICE>的状态:
命令行执行正常
直接在命令行执行以下命令:
sshpass -p none ssh -o StrictHostKeyChecking=no root@192.168.7.2 -t 'systemctl is-active <SERVICE>'
能得到预期输出:
failed
使用subprocess.check_output执行报错
但用Python的subprocess.check_output执行相同命令时:
subprocess.check_output("sshpass -p none ssh -o StrictHostKeyChecking=no root@192.168.7.2 -t 'systemctl is-active <SERVICE>'", shell=True, encoding='utf8', stderr=subprocess.DEVNULL)
会抛出如下错误:
Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.8/subprocess.py", line 415, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, File "/usr/lib/python3.8/subprocess.py", line 516, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command 'sshpass -p none ssh -o StrictHostKeyChecking=no root@192.168.7.2 -t 'systemctl is-active <SERVICE>'' returned non-zero exit status 3.
其他命令执行正常
用相同代码执行其他命令(如echo $PATH)时,subprocess.check_output能得到预期输出:
'/usr/bin:/bin:/usr/sbin:/sbin\n'
请问为何subprocess.check_output与systemctl配合时无法正常工作?
内容的提问来源于stack exchange,提问作者DonnyFlaw
相关产品推荐
相关产品推荐

