使用python获取firefox版本

使用python获取firefox版本,python,firefox,Python,Firefox,我想知道如何在linux系统上安装firefox版本 如果安装的版本早于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.se

我想知道如何在linux系统上安装firefox版本 如果安装的版本早于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"

有没有更好的方法获得安装的版本?

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


要获得安装版本,我看没有更好的方法。。。也许检查一下,3.9版将通过sub_版本<6。您应该检查版本是否大于:


要获得安装版本,我看没有更好的方法。。。也许检查一下,我想不出更好的方法来获取版本,但解析输出的更好方法可能是,而不是:

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)
在我的headless系统上,我得到了Mozilla Firefox 15.0.1,它被解析为

# v1: 15
# v2: 0
# v3: 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)
在我的headless系统上,我得到了Mozilla Firefox 15.0.1,它被解析为

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

试图获得正确的嵌套比较是很棘手的…而且没有必要。只要这样做:

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

试图获得正确的嵌套比较是很棘手的…而且没有必要。只要这样做:

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

您可以使用check_输出,而不是使用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)

您可以使用check_输出,而不是使用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)

有webbrowser模块,但我不知道其中有任何版本控制支持。有webbrowser模块,但我不知道其中有任何版本控制支持。另一种方法可能是:version=tuple[intx for x in stdout.strip.split.'.]@JimDennis:这将引发异常,因为stdout通常类似于Mozilla Firefox 3.6.18或Mozilla Firefox 3.6.18,版权c 1998-2010 Mozilla.org;无论哪种方式,您都将尝试使用intMozilla Firefox 3。另一种方法可能是:version=tuple[stdout.strip.split.'.]@JimDennis:这将引发一个例外,因为stdout通常类似于Mozilla Firefox 3.6.18或Mozilla Firefox 3.6.18,版权c 1998-2010 Mozilla.org;无论哪种方式,您都将尝试使用intMozilla Firefox 3。subprocess.check_输出是一个很好的改进,但是分割逻辑是错误的。考虑到Mozilla Firefox 3.6.13,版权c 1998-2010 Mozilla.org,split[-1]将返回Mozilla.org,split.'将返回Mozilla,org,并将int映射到该值,这将产生一个值错误。我认为问题不在于Mac与Linux,而在于3.6.x与更新的版本。我认为变化要么在1.9.2/3.6和2.0/5.0之间,要么在2.0/5.0和6.0之间。即使在修复之后……1.9.0给出了与1.9.2/3.6不同的格式。这表明这种方法太脆弱了,除非你要测试所有可能的Firefox版本。subprocess.check_输出是一个很好的改进,但是分割逻辑是错误的。考虑到Mozilla Firefox 3.6.13,版权c 1998-2010 Mozilla.org,split[-1]将返回Mozilla.org,split.'将返回Mozilla,org,并将int映射到该值,这将产生一个值错误。我认为问题不在于Mac与Linux,而在于3.6.x与更新的版本。我认为变化要么在1.9.2/3.6和2.0/5.0之间,要么在2.0/5.0和6.0之间。即使在修复之后……1.9.0给出了与1.9.2/3.6不同的格式。这表明这种方法太脆弱了,除非你要测试Firefox的每一个可能版本。这个链接没有告诉他任何他已经知道的事情。它建议使用-v而不是-version,但这绝对不是一个改进。它还展示了一个Windows的解决方案,但他只关心linux。这个链接没有告诉他任何他已经知道的事情。它建议使用-v而不是-version,但这绝对不是一个改进。它还展示了Windows的解决方案,但他只关心linux。