![](/img/trans.png)
[英]How do you get the geckodriver version from python selenium firefox webdriver?
[英]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
。
作为一个侧面说明,前两个版本的组件的标准术语是major
和minor
,不是main
和sub
。
无论如何,将它们放在一起(与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.