[英]Python script writes gibberish to file
這是我用來接收syslog並將其附加到文本文件的腳本:
# Receives packets on udp port 514 and
# writes to syslog.txt
from socket import *
# Set the socket parameters
host = "myhost"
port = 514
buf = 1024
addr = (host,port)
# Create socket and bind to address
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
# Receive messages
while 1:
data,addr = UDPSock.recvfrom(buf)
if not data:
print "Client has exited!"
break
else:
print "\nReceived message '", data,"'"
# This will create a new file or overwrite an existing file.
with open("C:\syslog.txt", "a") as myfile:
myfile.write(str(data))
# Close socket
UDPSock.close()
腳本可以正常工作,並且文本會附加到文件中。 我看到了,而且閱讀很好。 但是,當我關閉python時,該txt文件數據被轉換為亂碼文本。 有什么想法嗎? 在將套接字數據附加到文件之前,我是否應該做其他事情?
謝謝。
您沒有解析syslog數據包。 Syslog 是一個協議 ; 這不只是純文本。 數據字符很有可能最終出現在文件中,這可能會導致某些自動字符檢測失敗。
這可能直接完成您想要實現的目標(解析syslog協議並將其轉儲): http : //pypi.python.org/pypi/loggerglue/0.9
我本來建議做open(“ C:\\ syslog.txt”,“ at”)而不是open(“ C:\\ syslog.txt”,“ a”),但是重新讀取python dox,文本是默認值(與C不同,我的內存說二進制是默認值,在Windows上運行時會導致問題)。
我的另一個建議是,在您首次創建文件時,在文件頂部放置一個純文本標題。 不確定之后要使用什么來讀取文件,但是Notepad和Wordpad使用一些試探法來確定正在使用什么UTF-8或其他編碼,並且我肯定已經看到這種情況嚴重失敗了。 (搜索wordpad BOM猜測)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.