我想知道如何在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"
有没有更好的方法来获取已安装的版本?
答案 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
。
作为旁注,前两个版本组件的标准术语是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
答案 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?