如何检查输出是否包含特定单词?
我想检查'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()
我尝试三种不同的解决方案,并没有他们的实际工作。
使用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"
。
现在,当我进入“3”来初始化它,它根本没有反应,只是没有任何反应。 – metaphorex0
你的操作系统是什么? –
对不起,一直很忙。我的操作系统是Arch Linux。 – metaphorex0
不要调用变量'os'!这是标准库中通用模块的名称,您将对其进行掩码。更别说混淆了人们。 – cdarke
通过使用'''设置intersection'''您可以检查condition.'''set(OS).intersection([ “薄荷”, “Ubuntu的”, “Debian的”])''' – TrigonaMinima