繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM