簡體   English   中英

python腳本無輸出

[英]No output from python script

我想創建一段包含2個列表的代碼(第一個是IP列表,第二個是端口列表)。 使用迭代,我嘗試實現連接(列表中的某些地址不起作用。)並獲取第一個HTTP頁面,以檢查該地址是否存在。

這是我寫的代碼:

import socket
import sys

ipees = []
portees = []

text_file = open("/home/loggyipport.txt", "r")
lines = text_file.readlines()

def go():
    for x in lines:
        ip, port = x.split()
        ipees.append(ip)
        portees.append(port)




go()

def dfunc(ipees, portees):
    for (ip, port) in zip(ipees, portees):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        s.send('GET / HTTP/1.0\r\n\r\n')
        while 1:
            buf = s.recv(1000)
        if not buf:
            break
        sys.stdout.write(buf)
        s.close()

dfunc(ipees, portees)

該腳本正在運行,沒有錯誤。 問題是我沒有輸出。 有人可以找出問題所在嗎? 使用'zip'函數的for循環是否正確編寫?

您不會在函數內部返回任何內容,也不會在控制台上打印任何內容。 唯一的操作是在dfunc(ipees, portees)中擁有sys.stdout.write(buf) 嘗試添加sys.stdout.flush刷新緩沖區並打印到屏幕。

sys.stdout.write(buf)
sys.stdout.flush()

實際上,我可能還會發現另外一個問題。 腳本會終止嗎? dfunc有一個無限的while循環。

while 1:
    buf = s.recv(1000)

我對socket.socket不太了解,但看起來該循環永遠不會終止。

你的

 if not buf:
     break

不是您的循環的一部分。 您必須對此進行縮進,因此縮進成為循環的一部分。 感謝popovitsj指出來!

在dfunc函數中,由於該無限循環,程序成功連接到第一個IP,並無限期地等待來自服務器的數據。 如果只需要檢查是否已從服務器接收到某些數據,則根本不需要while循環。

這是一個可能會執行您想要的功能的函數:

def dfunc(ipees, portees):
    for (ip, port) in zip(ipees, portees):
        try:
            s = socket.create_connection((ip, port), timeout=10)
            s.send('GET / HTTP/1.0\r\n\r\n')
            buf = s.recv(1000)
            print buf
        except socket.error:
            print 'Could not connect to ({0}, {1})'.format(ip, port)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM