如何检查输出是否包含特定单词?

时间:2016-08-14 18:16:11

标签: python python-3.x subprocess

我试图检查' os'的输出。包含特定单词并根据结果执行命令。

问题是程序尝试执行命令,即使输出' os'不包含这些词。

写它的正确方法是什么?这些是检查它的条款:

elif int(choice0) == 3:
    import platform
    os = platform.linux_distribution()

    if "Fedora" in os:
        call(["sudo", "dnf", "install", "android-tools"])
        exit()

    elif "Mint" or "Ubuntu" or "Debian" in os:
        call(["sudo", "apt", "install", "android-tools-adb", "android-tools-fastboot"])
        exit()

    elif "Manjaro" or "Antergos" or "Arch" in os:
        call(["sudo", "pacman", "-S", "android-tools"])
        exit()

感谢大家尝试提供帮助,我目前的代码如下:

        import platform
        distro = platform.linux_distribution()

        if distro in ("Fedora", ):
            call(["sudo", "dnf", "install", "android-tools"])
            exit()

        elif distro in ("Ubuntu" or "Mint" or "Debian"):
            call(["sudo", "apt", "install", "android-tools-adb", "android-tools-fastboot"])
            exit()

        elif distro in ("Arch" or "Antergos" or "Manjaro"):
            call(["pacman", "-S", "android-tools"])
            exit()

我尝试了三种不同的解决方案,但实际上都没有。

1 个答案:

答案 0 :(得分:1)

按照你的方式使用or,基本上计算表达式中的第一个值(这里是文字"mint"),如果计算结果为True(它是非空字符串)文字做)它只是返回它,从而使if检查成功。

您应该检查any返回的元组中是否包含platform.linux_distribution这些值。你的条款应该是这样的:

if any(i in os for i in {"manjaro", "antergos", "arch"})

这是正确使用链式or s的更紧凑方式:

if "manjaro" in os or "antergos" in os or "debian" in os:

这是第一个问题,第二个问题来自您用来检查发行版是否在os中的名称。您应该检查的名称应该与_supported_dists元组中的名称匹配,即:

>>> print(platform._supported_dists)
('SuSE', 'debian', 'fedora', 'redhat', 'centos', 'mandrake', 'mandriva', 'rocks', 
'slackware', 'yellowdog', 'gentoo', 'UnitedLinux', 'turbolinux', 'arch', 'mageia')

因此,您不应该使用"arch""fedora""debian"