可选输入()语句

2024-10-01 17:41:13 发布

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

我正在为学校的公共硬盘创建一个即时通讯程序。除了小细节,我什么都做得很好。在下面的代码中,它检查来自朋友的新消息并打印他们发送的最后一条消息。如果没有消息,它会这么说。问题是当它移动到代码的下一步时,它会等待用户输入。除非您给出一个输入,否则它不会让您再收到任何消息,因为程序停止读取和搜索while循环,并被input语句捕获。我想知道是否有任何方法使input语句成为可选的。也就是说,它不需要输入,但如果有输入,它会发送它并做它的事情。我只是想不出一个办法让input语句成为可选的。任何想法或工作代码将不胜感激。如果你需要完整的代码,我没有问题发送给你或张贴它。不过,这是对这个问题真正重要的代码。你知道吗

        LastMessage = ""
        while Message:

            Path = "Message"+SendTo+"-"+UserName+".txt"

            if path.isfile(Path):

                LoadMessage = open(Path, "rb")
                NewMessage = pickle.load(LoadMessage)
                LoadMessage.close()

            else:
                NewMessage = "Sorry, No messages found"   

            if LastMessage != NewMessage:

                LastMessage = NewMessage
                print(NewMessage)
                print("")

            SendMessage = raw_input()  #--- This is where it gets caught up! ---

            Save = open("Message"+UserName+"-"+SendTo+".txt", "wb")
            pickle.dump(SendMessage, Save)
            Save.close()

Tags: path代码程序txt消息messageinputsave
2条回答

在我看来,你有两个主要的选择:

  1. 同时输入和检查(各种选项,从标准库中搜索threadingmultiprocessing);或
  2. 输入超时和循环(参见How to set time limit on raw_input)。你知道吗

所以听起来你想同时做两件不同的事情——寻找来自某个用户的输入,并轮询来自其他用户的新消息。jornsharpe将线程作为解决这个问题的第一个选择,我同意这是最直接的。你需要做的是:

    import threading

    class InputMessageThread(threading.Thread):
        def run(self):
            SendMessage = raw_input()  # This thread will hang here for input but thats 
                                       # OK as original thread will keep going
            Save = open("Message"+UserName+"-"+SendTo+".txt", "wb")
            pickle.dump(SendMessage, Save)
            Save.close()

    inputthread = InputMessageThread()
    inputthread.start()

    # rest of your code here

尽管你可能想看看其他的问题。例如,如果我理解您正试图正确地执行的操作,您将拥有一个包含从源用户到目标用户的消息的文件。但如果源用户在处理此文件之前发送第二条消息,则第一条消息将被覆盖。在实践中,您可能永远看不到这一点,但是在您允许编写下一个消息之前,通过某种握手来确保消息已实际发送,这将是一种更为健壮的方法。你知道吗

相关问题 更多 >

    热门问题