- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个正在进行的项目,但我已将问题带入下面的一个小示例代码中。我首先创建一个套接字,然后生成一个线程来接受连接(这样我就可以连接多个客户端)。当我收到连接时,我会生成另一个线程来监听该连接。我还处于一个循环中,提示我可以在其中输入任何内容,它会打印出来给我。
问题出在我通过套接字接收到某些东西时。它会打印到屏幕上。但是,当我尝试在控制台中键入任何内容时,控制台上来自套接字的文本将被删除。我想让套接字中的所有内容都保留在屏幕上。
import sys
import socket
from _thread import *
def recv_data(conn):
while True:
data = conn.recv(256)
print(data)
def accept_clients(sock):
while True:
conn, addr = sock.accept()
print("\nConnected with %s:%s\n" % (addr[0], str(addr[1])))
start_new_thread(recv_data, (conn,))
def start_socket(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket created")
try:
port = int(port)
except ValueError:
print("Invalid port number.")
return
try:
sock.bind((ip, int(port)))
except socket.error as msg:
print("Bind failed. Error Code : %s" % (msg))
return
print("Socket bind complete")
sock.listen(5)
print("Socket now listening")
start_new_thread(accept_clients, (sock,))
def get_input():
while True:
data = input("cmd> ")
print(data)
start_socket('localhost', 5555)
get_input()
图片可以在这里找到它正在做什么:https://imgur.com/a/hCWznfE
最佳答案
您在主题行中的问题(关于 sys.stdout
的缓冲,print
默认写入)的答案基本上是否定的:每个线程都与相同的 sys.stdout
对象,一般只有一个缓冲区,当然你可以根据需要更改 sys.stdout
,并且你可以提供 file=
参数。print()
的任何
然而,这个特定部分是可以解释的:
But when I try to type anything in the console, the text that is on my console that came from the socket gets removed. I want to keep everything from the socket to remain on the screen.
Python 的输入阅读器默认通过 readline
库。有多个具有不同行为的不同 readline 库,但它们中的大多数都提供输入历史记录、行编辑和其他奇特的功能。他们倾向于通过在终端窗口中四处移动光标来实现这些奇特的功能——假设你首先使用某种终端窗口——并在次。这些操作通常会干扰、覆盖或删除在这些奇特技巧之前、期间和/或之后发生的其他输出。
根据您的操作系统、终端仿真器以及您的 Python 使用的 readline 库,具体细节会有很大差异。
关于python - Python 线程是否打印到与主线程不同的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53093477/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!