首页 > 解决方案 > 为什么 commands.getstatusoutput 不起作用?

问题描述

我想研究一下 linux VM 是否安装了 XY 包。输出为 1,但在 if 语句之后没有打印 XY 已安装。你能给我一些想法我该如何解决这个问题。

import os 
import commands

status, output = commands.getstatusoutput("rpm -qa | grep XY |wc -l")
if(output==1):
    print("XY is installed on this pc")

标签: pythonrpm

解决方案


的输出wc是一个字符串;它永远不能等于整数。你可以转换它,或者比较它'1',但无论如何这都是无用的wc

更好的方法是只将rpm命令作为子进程运行,并使用简单的本机 Python 片段检查其输出。

import subprocess

if 'XY' in subprocess.check_output(['rpm', '-qa']):
    print('XY is installed')

这有点容易出现误报,因为您正在检查输出的任何部分是否包含'XY'任何地方的子字符串。如果您已安装libXY-devABCXYZ已安装,它将错误地声称您已安装XY. 最好只查询 RPM 以了解此特定包的状态;但希望这至少能让你开始。

或许还要注意这如何避免一个总是胜利的 shell,特别是如果你对 shell 及其陷阱不太熟悉的话。


推荐阅读