gpt4 book ai didi

python - 将控制台输入行保持在输出下方

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:54 25 4
gpt4 key购买 nike

[编辑:]我目前正在尝试制作一个小型 tcp 聊天应用程序。发送和接收消息已经工作正常......但问题是:

当我在收到消息时开始输入消息...它出现在我正在写的文本之后

截图:http://s7.directupload.net/images/140816/6svxo5ui.png

[用户发送>“你好”,然后我开始写“我正在写......”然后用户在我发送消息之前写了“我发送了......”......所以它已经放在我输入之后...我希望传入消息始终在我输入之前!

这是我当前的代码:客户端.py

con = connect.User()
server = raw_input("Type in the server adress \n[leave blank to use xyr.no-ip.info]\n>:")
nick =""

while nick == "":
nick = raw_input("Type in your nickname\n>:")

con.connect(server, nick)


def sender():
print("Sender started")
while 1:
msg = raw_input()
if msg == "q":
break
con.send(msg)

con.disconnect()



def receiver(server):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

if server == "":
server="xyr.no-ip.info"

sock.connect((server, 8000))

sock.send("%pyreceiver\n")

print("Receiver started")

while 1:
msg_in = sock.recv(1024)
if not str(msg_in).startswith("[py]" + nick):
if str(msg_in).startswith("/ua"):
print(str(msg_in)[3:])

elif str(msg_in).startswith("/u "):
print(str(msg_in)[2:])
else:

print(str(msg_in[:-1]))
#

if nick == "":
nick = "guest"
print("Name changed to ""guest""")
time.sleep(.5)

thread.start_new_thread(receiver, (server, ))
time.sleep(.5)
thread.start_new_thread(sender())

连接.py

import socket

import time

class User():


nickel =""
def connect(self, server="xyr.no-ip.info", nick="guest"):
nickel = nick
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if server == "":
server="xyr.no-ip.info"
print("server changed to xyr.no-ip.info")
time.sleep(.5)


print("Connecting...")
self.sock.connect((server, 8000))
print("Connected")
time.sleep(.4)
self.sock.send("[py]" + nick + "\n")


self.sock.send(nick + " connected with a python client\n")
print("registered as " + nick)
time.sleep(.3)


def send(self, msg):
self.sock.send(msg + "\n")


def disconnect(self):
self.sock.close()

print("disconnected")

最佳答案

您的代码将所有内容写入标准输出。每当有东西到达您的发送者/接收者线程中的任何一个时,它都会打印到标准输出。问题在于,由于输出流的基本性质,您不能完成以下操作:

  • 将收到的消息置于当前正在键入/回显的内容之上。

事情严格按照发生的先后顺序发生。一旦有东西进来,无论光标在哪里,打印语句都会将数据转储到那里。如果不使用更高级/更强大的构造,您将无法修改该行为。

为了做你想做的事,我会使用 ncurses .您似乎在 Windows 上使用 python,因此您将不得不深入研究如何获得等效功能。查看此线程:Curses alternative for windows

关于python - 将控制台输入行保持在输出下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25342420/

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