簡體   English   中英

使用python獲取Firefox版本

[英]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

作為一個側面說明,前兩個版本的組件的標准術語是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

除了使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM