我试图检查' 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()
我尝试了三种不同的解决方案,但实际上都没有。
答案 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"
。