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