2017-07-27 1 views
1

これは、これまでの私のコードです:のLinux端末からデータを読み取るためのPythonサブプロセスモジュールを使用する方法

import subprocess 


def __init__(pingcount, hostname): 

    try: 
     out, error = subprocess.Popen.communicate(subprocess.Popen("ping -n " + pingcount + ' ' + hostname), timeout=10) 
    except subprocess.TimeoutExpired: 
     subprocess.Popen.kill(subprocess.Popen) 
     return "No connection to terminal. Contact system administrator." 

    print(str(out)) 

    if str(out).find("rtt") != -1: 
     return str(out)[str(out).find("rtt"):] 
    else: 
     return "No connection to server." 

同様のコードは、Windows上で動作しますが、この関数を呼び出すときに、私はNoneの戻り値を取得します。 LinuxでのPING(8)のmanページから

+0

私は答えを書いており、以前の質問を削除しました。だから、忍耐を持ってください。人々はあなたを助けてくれるでしょう:) – direprobs

+0

@direprobs私は、私がすでに同じコードであなたに返信していたことを認識していない、より記述的なコードで自分の投稿を更新すると考えました。お詫び申し上げます。ありがとうございました。 –

+0

よろしくお願いします! – direprobs

答えて

0

:数ECHO_REQUESTパケットを送信した後

-cカウント停止。デッドラインオプションを指定すると、pingはタイムアウトが切れるまでECHO_REPLYパケットのカウントを待ちます。

-n数値出力のみ。ホストアドレスのシンボリック名を検索する試みは行われません。

は、コマンドは、Linuxに失敗した結果として-n引数を渡している:初めに

$ ping -n 10 www.google.com 
connect: Invalid argument 

from subprocess import Popen, PIPE, TimeoutExpired 
import sys 

# inside class body 
def __init__(pingcount, hostname): 
    if sys.platform == "linux": 
     cmd = ["ping", "-c", pingcount, hostname] 
    else: 
     cmd = "ping -n " + pingcount + ' ' + hostname  # else: assume Windows 

    proc = Popen(cmd, stdout=PIPE, stderr=PIPE) 

    try: 
     proc_stdout, proc_stderr = proc.communicate(timeout=19) 
    except TimeoutExpired: 
     proc.kill()    # on Linux send SIGKILL signal 
     return "No connection to terminal. Contact system administrator." 

    # rest of code... 

if文は単にPythonが実行されているオペレーティングシステムをチェックPopenに渡す正しいコマンドを決定しました。

注:proc.killを使用すると、LinuxなどのPOSIXオペレーティングシステムでSIGTERMを送信します。これはプロセスを殺すために非常に残酷な方法です。オペレーティングシステムは強制的にプロセスを終了し、メモリから削除します。おそらくproce.terminateを代わりに使用する必要があります。しかし、ここではproc.killpingと使用することに深刻な影響はありません。 subprocessモジュールのドキュメントのPopen.killセクションを参照してください。

+1

ありがとう、私は間違った引数に気づいていませんでした。また、SSHで間違ったファイルを実行しています。私はもっ​​とコーヒーが必要です。乾杯! –

関連する問題