我正在运行一个遍历文本文件的脚本。在文本文件的每一行上都有一个IP地址。脚本抓取横幅,然后将ip +横幅写入另一个文件。 问题是,它几乎停止了大约500行,没有错误。 另一个怪异的事情是,如果我使用python3运行它,它会执行我上面所说的操作。如果我使用python运行它,它将遍历这500行,然后从开头开始。当我在输出文件中看到重复时,我注意到了这一点。无论如何,这里是代码,也许你们可以告诉我我做错了什么:
import os
import subprocess
import concurrent.futures
#import time, random
import threading
import multiprocessing
with open("ipuri666.txt") as f:
def multiprocessing_func():
try:
line2 = line.rstrip('\r\n')
a = subprocess.Popen(["curl", "-I", line2, "--connect-timeout", "1", "--max-time", "1"], stdout=subprocess.PIPE)
b = subprocess.Popen(["grep", "Server"], stdin=a.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
#a.stdout.close()
out, err = b.communicate()
g = open("IP_BANNER2","a")
print( "out: {0}".format(out))
g.write(line2 + " " + "out: {0}\n".format(out))
print("err: {0}".format(err))
except IOError:
print("Connection timed out")
if __name__ == '__main__':
#starttime = time.time()
processes = []
for line in f:
p = multiprocessing.Process(target=multiprocessing_func, args=())
processes.append(p)
p.start()
for process in processes:
process.join()
答案 0 :(得分:0)
如果您的用例允许,我建议仅将其重写为Shell脚本,则无需使用Python。 (这可能会间接解决您的问题。)
#!/usr/bin/env bash
readarray -t ips < ipuri666.txt
for ip in ${ips[@]}; do
output=$(curl -I "$ip" --connect-timeout 1 --max-time 1 | grep "Server")
echo "$ip $output" >> fisier.txt
done
该脚本比您尝试做的要简单一些,例如,我没有捕获该错误。这应该与您要完成的工作非常接近。如有需要,我会再次更新。