2016-11-25 10 views
0

デバイスのアップ/ダウンとパケット損失のコピーをチェックする2つの作業コマンドがあります。ダウン、デバイスアップをチェックして、ためにLinuxで2つのpingコマンドを組み合わせる

は、私はos.systemを使用して実用的ではないと知っている

packetloss = os.popen ("ping -c 5 " +hostname+ "| grep -oP '\d+(?=% packet loss)'").read().rstrip() 
packetloss = int(packetloss) 

を使用し、コピーの場合はパケットロス値を
result = os.system ("ping -c 5 " +hostname) 

を使用しました。私の質問は、両方のコマンドを組み合わせる方法ですか?今のところ私はデバイスをアップ/ダウンさせるために2回pingする必要があり、もう1つのpingはパケット損失の値をチェックする必要があります。私はちょうど両方の結果を得るために一度pingできますか?

答えて

1

サブプロセスを使用します。次に、必要な文字列を直接解析できます。

編集: pythonスクリプトが更新されました。

import subprocess 

output = "" 
error = "" 
hostname = "www.google.com" 
try: 
    cmd = "ping -c 5 " + hostname 
    p = subprocess.Popen([cmd], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 
    output = str(p[0]) 
    error = str(p[1]) 
except Exception, e: 
    error = str(e) 

if output: 
    data = output.split("--- " + hostname + " ping statistics ---") 
    print "\nPing output:\n", data[0].strip() 
    statistics = data[-1].strip() 
    print "\nStatistics:\n", statistics 
    packetloss = str(statistics.splitlines()[0]).split(",") 
    packetloss = packetloss[2].strip() 
    packetloss = packetloss[:packetloss.find("%")] 
    print "\nPacketLoss:", packetloss 
if error: 
    print "\nError:", error 
+0

文字列に問題はありません。私はちょうど1つのコマンドに両方のpingコマンドを組み合わせて時間を節約したい。上記のようにしても、ping -c -5 hostnameと置き換えても、2つの異なる結果を得るのに2回だけpingする必要があります。 – Jack

+0

上記のコマンドを使用して2回のアドレスをpingしてください。デバイスのアップ/ダウンとパケット損失の値を取得するのに1回だけpingすることはできますか? – Jack

+0

@Jack申し訳ありませんが、 'デバイスのアップ/ダウンとパケットロスの値を得るために一度だけpingするのは分かりませんか? ' しかし、私が理解していることは、ping出力' ping -c 5 + hostname' 'PacketLoss'を見つけるために、私はそうですか?それが事実なら、なぜ2回pingしますか? 'grep'を使わずにPythonで文字列を解析するだけです。 これは簡単な方法です。そうでない場合は、必要な出力を投稿してください。 –

関連する問題