用python获取firefox版本

时间:2013-03-22 20:06:26

标签: python firefox

我想知道如何在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"

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试获得嵌套比较权是很棘手的......而且没必要。就这样做:

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

此外,您将获得版本字符串。你几乎肯定想将它们转换为整数。虽然'2' < 3是真的(在2.x中),但'4' < 3也是如此。 (而且,虽然您可以通过与'3'而不是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

答案 2 :(得分:1)

您可以使用check_output。

,而不是使用popen和PIPE
>>> 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 :(得分:0)

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

要获得安装版本,我没有看到更好的方法......也许检查From command line, how to know which Firefox version is installed in windows/linux?