gpt4 book ai didi

python - 如果显示其他文本则终止 raw_input()

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:27 26 4
gpt4 key购买 nike

我有一个使用 SocketServer 在 Python 中制作的简单服务器应用程序,它有一个非常原始的命令行类型输入系统。我的主要问题是,当服务器收到消息时,它将其打印到屏幕上。除了 raw_input 函数仍在等待文本输入和检查之外,这一切都很好。有没有办法在服务器handle()函数中停止raw_input或引发一些异常来结束输入并显示服务器正在接收的信息?

谢谢,
扎克。

最佳答案

据我所知,这是不可能的,因为 raw_input 接受来自 python 命令控制台的输入。然而,有一些可能意想不到的绕过它的方法:

1 - 不使用控制台,而是创建一个带有输出和输入行的简单 Tkinter 窗口。创建一个自定义打印函数,将消息附加到窗口文本的末尾(可以使用固定宽度字体位于滚动条中),然后创建一个响应输入的命令提示框。其代码如下所示:

from Tkinter import *
root = Tk()
topframe=Frame(root)
bottomframe=Frame(root)
bottomframe.pack(side=BOTTOM,fill=X)
topframe.pack(side=TOP,fill=BOTH)
scrollbar = Scrollbar(topframe)
scrollbar.pack(side=RIGHT,fill=Y)
text = Text(topframe,yscrollcommand=scrollbar.set)
text.pack(side=LEFT,fill=BOTH)
scrollbar.config(command=text.yview)
text.config(state=DISABLED)
v = StringVar()
e = Entry(bottomframe,textvariable=v)
def submit():
command = v.get()
v.set('')
#your input handling code goes here.
wprint(command)
#end your input handling
e.bind('<Return>',submit)
button=Button(bottomframe,text='RUN',command=submit)
button.pack(side=RIGHT)
e.pack(expand=True,side=LEFT,fill=X)
def wprint(obj):
text.config(state=NORMAL)
text.insert(END,str(obj)+'\n')
text.config(state=DISABLED)
root.mainloop()

另一种选择是创建您自己的 print 和 raw_input 方法,如下所示:

import threading
wlock=threading.Lock()
printqueue=[]
rinput=False
def winput(text):
with wlock:
global printqueue,rinput
rinput=True
text = raw_input(text)
rinput=False
for text in printqueue:
print(text)
printqueue=[]
return text
def wprint(obj):
global printqueue
if not(rinput):
print(str(obj))
else:
printqueue.append(str(obj))

关于python - 如果显示其他文本则终止 raw_input(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4220702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com