1

いくつかの (かなりの数の!) ホストに ping を送信する Python スクリプトがあります。スクリプトでpingするホストとしてhosts.txtファイルの内容を読み取るようにこれを設定しました。奇妙なことに、最初のいくつかのアドレスに対して次のエラーが表示されます (それらが何であれ)。

Ping request could not find host 66.211.181.182. Please check the name and try again.

上記のアドレスを 2 回 (ファイル内に) 含め、ping を試みます。私が間違っていることについての考え - 私はpythonの初心者なので、優しくしてください。


これが私のスクリプトです:

import subprocess

hosts_file = open("hosts.txt","r")
lines = hosts_file.readlines()

for line in lines:
    ping = subprocess.Popen(
        ["ping", "-n", "1",line],
        stdout = subprocess.PIPE,
        stderr = subprocess.PIPE
    )
    out, error = ping.communicate() 
    print out
    print error
hosts_file.close()

これが私のhosts.txtファイルです:

66.211.181.182
178.236.5.39
173.194.67.94
66.211.181.182

そして、上記のテストの結果は次のとおりです。

Ping request could not find host 66.211.181.182
. Please check the name and try again.


Ping request could not find host 178.236.5.39
. Please check the name and try again.


Ping request could not find host 173.194.67.94
. Please check the name and try again.



Pinging 66.211.181.182 with 32 bytes of data:
Request timed out.

Ping statistics for 66.211.181.182:
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss)
4

2 に答える 2

2

変数の最後に改行が含まれているようlineです (ファイルの最後の行を除く)。Pythonチュートリアルから:

f.readline()ファイルから 1 行を読み取ります。改行文字 ( \n) は文字列の最後に残され、ファイルが改行で終わらない場合、ファイルの最後の行でのみ省略されます。

\nを呼び出す前に削除する必要がありますPopen: Python で改行を削除 (チョップ) するにはどうすればよいですか?

于 2012-05-08T15:20:06.437 に答える
1

いくつかのコメント:

  1. readlines() の使用は、ファイル全体をメモリにロードするため、強くお勧めしません。
  2. 各行で rstrip を実行してからサーバーに ping を実行するために、Generator を使用することをお勧めします。
  3. file.close を使用する必要はありません - with ステートメントを使用すると、それを実行できます

コードは次のようになります。

import subprocess
def PingHostName(hostname):
    ping=subprocess.Popen(["ping","-n","1",hostname],stdout=subprocess.PIPE
                  ,stderr=subprocess.PIPE)
    out,err=ping.communicate();
    print out
    if err is not None: print err

with open('C:\\myfile.txt') as f:
    striped_lines=(line.rstrip() for line in f)
    for x in striped_lines: PingHostName(x)  
于 2012-05-10T12:02:36.380 に答える