我正在创建一个原始套接字服务器,以便更多地了解网络。在我尝试创建它时,我决定尝试创建一个“聊天记录”。我的计划是让服务器后端脚本(为Tkinter GUI提供支持的脚本)将所有已发送的消息附加到名为old_msg.txt
的文本文件中。
为此,我创建了一个名为old_msg
的函数。它在这里定义。
def old_msg(data):
while True:
oldmsg = open("old_msg.txt", "a+")
try:
oldmsg.write("%s \n" % (data))
except TypeError:
print "SERVER MSG >>> NO MESSAGE SENT"
oldmsg.close()
我在另一个函数clientthread
中调用它,如果数据不为空,则会附加数据。
while True:
#Receiving from client
data = connection.recv(1024)
if not data:
break
if data:
connection.sendall(data)
old_msg(data)
print data
connection.close()
不同寻常的是,此代码创建了一个UNIX_EXECUTABLE.
它被称为old_msg
,这里是shell中显示的一些文本。这重复了数千次。
/Volumes/***'s USB/Python Programs/Sockets/IM Project/Server/Different Idea/old_msg: line 43159: hello: command not found
/Volumes/***'S USB/Python Programs/Sockets/IM Project/Server/Different Idea/old_msg: line 43160: hello: command not found
logout
为什么这段代码会创建一个unix可执行文件?
修改
我向服务器发送了“Hello World”消息。您可以找到pastebin here
答案 0 :(得分:4)
此代码会写入包含消息old_msg.txt
的文本文件hello world
。此文本文件使用非UNIX文件系统(如FAT32)写入USB磁盘或磁盘上。因此,文本文件默认设置了执行位。这是因为FAT32没有执行位,Mac OS X显示和使用的UNIX权限由操作系统组成。此外,Mac OS X似乎隐藏了您的扩展.txt
(我相信在Finder的设置中可以调整)。所以你得到的是一个名为old_msg
的可执行文件。当您单击它以运行它时,操作系统会尝试将其解释为脚本,这会导致您看到的错误消息;消息的第一个单词hello world
被解释为要运行的UNIX命令的文件名。
答案 1 :(得分:0)
此代码不会创建unix可执行文件。但不知何故,您已将文件的可执行位设置为true。但是,您的代码不会这样做。
答案 2 :(得分:0)
这是部分答案。我对其他人开放 - 这只是我发现的东西。
我认为我的代码问题是old_msg(data)变量中的while True
行。当我摆脱它时,没有创建脚本/ exec / whatever-it-was。
问题是来自old_msg()
函数的双循环和clientthread
函数中的另一个循环。