Python脚本向fi写入胡言乱语

2024-04-18 08:11:18 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我用来接收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文件数据就被转换成了乱七八糟的文本。有什么想法为什么?在将套接字数据附加到文件之前,是否应该执行其他操作?在

谢谢。在


Tags: and文件totxt脚本hostdatabind
3条回答

这可能直接实现您想要实现的目标(解析syslog协议并将其转储): http://pypi.python.org/pypi/loggerglue/0.9

您没有解析syslog包。Syslogis a protocol;它不仅仅是纯文本。数据字符最有可能出现在文件中,这可能会妨碍某些自动字符检测。在

我想建议你做开放式(“C:\系统日志.txt“,”at“)而不是open(“C:\系统日志.txt“,”a“),但是重新读取python-dox时,文本是默认值(与C不同,我的内存中说二进制是默认值,这会导致在windows上运行时出现问题)。在

我的另一个建议是,当你第一次创建文件时,在文件的顶部放一个纯文本的标题;不确定之后你用什么来读取文件,但是记事本和写字板使用了一些启发式方法来确定使用的是UTF-8或其他编码,我肯定看到过这种情况很糟糕。(搜索写字板BOM猜测)

相关问题 更多 >