【问题标题】:python error code handlingpython错误码处理
【发布时间】:2015-11-18 06:45:34
【问题描述】:

我想检查安装了什么发行版:

def check_linux():
    if subprocess.call(['apt-get', '-v']) == 0: #if true
        print('apt')
    else:                                       #if false
        print('rpm')

check_linux()
print('done')

当我在 debian 发行版上尝试这个时,一切正常,我得到: 标准输出的“apt”和“done”。但是,如果我在 fedora 上运行此代码,则会出现错误代码并且“完成”没有打印(脚本结束得太早)。 如何解决这个问题?

【问题讨论】:

  • 试试try/except

标签: python subprocess error-code


【解决方案1】:

subprocess.call 如果找不到要运行的可执行文件,则会引发异常,Fedora 和apt-get 就是这种情况。您可以遍历PATH 或尝试任何其他常用技巧,但幸运的是,Python 的标准库中已经有函数platform.linux_distribution(),例如:

>>> import platform
>>> platform.linux_distribution()
('CentOS Linux', '7.0.1406', 'Core')

您可以查看它是如何实现的here

【讨论】:

    【解决方案2】:

    使用try/except。使用这种方法,您只需 try 运行 apt。如果这不起作用(即--except)尝试运行rpm。如果这些都不起作用,那么我建议默认使用 Bereal 的建议——使用默认的 platform.linux_distribution。 但是,由于很可能至少安装了其中一个,我认为您最好使用try 方法。此外,您可以稍后包含 yum 等软件包。 try/except 的示例代码(通用):

    try:
        x = input("Please input a number.\n")
    except ValueError: # Someone put in a character
        print 'Not a valid number.\n'
    

    在你的场景中:

    import os
    package_manager = ""
    def check_linux():
        try:
            os.system("apt")
            package_manager = "apt"
        except:
            os.system("rpm")
            package_manager = "rpm"
        except: # WARNING! NEVER USE EXCEPT WITHOUT AN ERROR EXCEPT IN THE SIMPLEST OF SCENARIOS. When I find the correct error for this situation I will edit my code.
            os.sytem("yum")# ...etc, etc.
            package_manager = "yum"
        print package_manager
    
    check_linux()
    print 'done'
    

    编码愉快!祝你好运!

    【讨论】:

    • try..except..except 不是有效的 Python 语法。
    • @bereal 我知道,但我不知道错误是什么。如果您有多个不同的错误,则可以有多个例外。
    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多