私はテキストファイルに保存されたIPアドレスのリストを持っており、サブプロセスモジュールとforループを使ってコード番号(404,200,504、...)をチェックしたいと思います。 1つのIPアドレスのために私のコードは正常に動作しますが、リストに複数のIPが含まれていれば、いくつかのエラーが出ます。サブプロセスモジュールがforループで複数のコマンドを実行しないのはなぜですか?
77.87.19.114
143.21.15.91
17.63.33.21
24.44.12.181
私が使用するコード:
from subprocess import check_output
def ipcheck200(ip_list_file):
with open(ip_list_file) as f:
content = f.readlines()
for item in content:
# url generator for each ip
url = "http://" + item + "/"
#print(content[0])
# command generator for each ip
command = "python -c " + '"'
command += "import urllib ;"
command += "a = urllib.urlopen('%s') ;print(a.getcode())" % url
command += '"'
proc = check_output(command)
print(proc)
結果は次のようになります。
> Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
ipcheck200('test.txt')
File "C:\Users\XXXX\XXXX\XXXX\file.py", line 17, in ipcheck200
proc = check_output(command)
File "C:\Python27\lib\subprocess.py", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command 'python -c "import urllib ;a = urllib.urlopen('http://77.87.19.114
/') ;print(a.getcode())"' returned non-zero exit status 1
URLの最後に '/'( 'http://77.87.19.114 /')の直前にスペースがありますが、それは正常ですか? 入力を確認してください。 – Morb
forループなしではどうなりますか? –
@MorbはいそれはOKです、ただチェックしました。 – Uncle