我的python脚本停止了…没有错误,只是停止了

问题描述 投票:0回答:1

我正在运行一个遍历文本文件的脚本。在文本文件的每一行上都有一个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()
python banner
1个回答
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 "out: $output" >> "IPBANNER2"
done

该脚本比您要尝试的要简单一些,例如,我没有捕获该错误。这应该与您要完成的工作非常接近。如有需要,我会再次更新。

© www.soinside.com 2019 - 2024. All rights reserved.