![](/img/trans.png)
[英]How to notify myself when a python script runs into an error or just stops?
[英]My python script stops… no error, just stops
我正在运行一个迭代文本文件的脚本。 在文本文件的每一行都有一个 ip 地址。 脚本抓取横幅,然后将 ip + 横幅写入另一个文件。 问题是,它只是停止了大约 500 行,或多或少,没有错误。 另一个奇怪的事情是,如果我用 python3 运行它,它会按照我上面所说的那样运行。 如果我用 python 运行它,它会遍历这 500 行,然后从开头开始。 当我在 output 文件中看到重复时,我注意到了这一点。 无论如何这里是代码,也许你们可以告诉我我做错了什么:
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()
如果您的用例允许,我建议将其重写为 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
该脚本比您尝试执行的操作稍微简单一些,例如我没有捕获错误。 这应该非常接近您要完成的任务。 如果需要,我会再次更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.