为什么这个Python函数创建了一个Unix可执行文件?

时间:2013-03-15 20:26:34

标签: python macos unix

我正在创建一个原始套接字服务器,以便更多地了解网络。在我尝试创建它时,我决定尝试创建一个“聊天记录”。我的计划是让服务器后端脚本(为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

3 个答案:

答案 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函数中的另一个循环。