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

问题描述:

我想检查'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

不要调用变量'os'!这是标准库中通用模块的名称,您将对其进行掩码。更别说混淆了人们。 – cdarke

+0

通过使用'''设置intersection'''您可以检查condition.'''set(OS).intersection([ “薄荷”, “Ubuntu的”, “Debian的”])''' – TrigonaMinima

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

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

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"

+0

现在,当我进入“3”来初始化它,它根本没有反应,只是没有任何反应。 – metaphorex0

+0

你的操作系统是什么? –

+0

对不起,一直很忙。我的操作系统是Arch Linux。 – metaphorex0