使用python获取firefox版本
我想知道如何在linux系统上安装firefox版本 如果安装的版本早于3.6,则打印消息 我目前的解决办法是:使用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
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。