繁体   English   中英

使用python获取Firefox版本

[英]Get firefox version with python

我想知道如何在Linux系统上获取已安装的firefox-version,并在安装的版本低于3.6时显示一条消息。

我当前的解决方案是:

from subprocess import Popen, PIPE
import re

cmd = 'firefox --version'
p = Popen(['firefox','--version'], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()

main_version_start = re.search("\d", stdout)

main_version_end = stdout.index(".",main_version_start.start()) 

main_version = stdout[main_version_start.start():main_version_end]

print main_version

通过这种方法,我得到了第一位数。 对于该点之后的数字,可以执行相同的操作。 现在我可以做类似的事情:

if main_version < 4:
    if sub_version < 6:
       print "Firefox version is too old"

有没有更好的方法来获取已安装的版本?

我想不出一种获取版本的更好方法,但是解析输出的更好方法可能是:

main_version_start = re.search("\d", stdout)

main_version_end = stdout.index(".",main_version_start.start()) 

main_version = stdout[main_version_start.start():main_version_end]

就像是

(v1,v2,v3) = re.search("(\d+).(\d+).(\d+)", stdout).group(1,2,3)

在我的无头系统上,我得到“ Mozilla Firefox 15.0.1”,其解析为

# v1: 15
# v2: 0
# v3: 1

试图正确地进行嵌套比较是棘手的……而且是不必要的。 只要这样做:

if (main_version, sub_version) < (3, 6):
    print "Firefox version is too old"

另外,您将以字符串形式获取版本。 您几乎肯定要将它们转换为整数。 (2.x中) '2' < 3是正确的,但'4' < 3也是正确的。 (而且,虽然您可以通过比较'3'而不是3来解决该特定问题,但是'11' < '3'也是正确'11' < '3' 。)

同时,如jedwards所解释,使用正则表达式时,使用捕获组通常比使用开始和结束值要简单得多。

当然,您可能需要一些错误处理。 在根本没有Firefox的系统上,您的Popen调用将引发OSError

作为一个侧面说明,前两个版本的组件的标准术语是majorminor ,不是mainsub

无论如何,将它们放在一起(与shantanoo的更简单的subprocess调用一起):

def firefox_36_or_later():
    try:
        output = subprocess.check_output(['firefox', '--version'])
    except Exception as e:
        print "Failed to run Firefox: {}".format(e)
        return False
    try:
        major, minor = map(int, re.search(r"(\d+).(\d+)", output).groups())
    except Exception as e:
        print "Failed to parse '{}' for version number: {}".format(output, e)
        return False
    if (major, minor) < (3, 6):
        print "Firefox version is too old"
        return False
    return True

除了使用popen和PIPE,还可以使用check_output。

>>> import subprocess
>>> output = subprocess.check_output(['firefox', '--version'])

解析Mac输出:

>>> tuple(map(int, output.split()[-1].split(b'.'))) > (4, 6)
True

对于Linux

>>> tuple(map(int, output.split()[2][:-1].split(b'.')))[:-1] > (4, 6)

这样,版本3.9将通过“ sub_version <6”。 您应该检查版本是否大于:)

要获得安装的版本,我看不出任何更好的方法...也许从命令行检查,如何知道Windows / Linux中安装了哪个Firefox版本?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM