我正在尝试通过 UDP 套接字从控制台应用程序路由进度条,以远程显示任务的完成状态。出于某种奇怪的原因,可以读取来自子进程 stdout.PIPE 输出的所有数据,但如果我尝试写入文件或通过 UDP 套接字传输时进度条显示为空白,则除外。我怀疑进度条根本没有被引导到 stdout.PIPE,因为它没有以结尾 因为如果我删除 stdout.PIPE 的打印语句,进度条仍会打印在控制台中。我试图用 tqdm 库重现问题:
sample_process.py
from time import sleep
from tqdm import tqdm
for i in range(10):
print(i)
for i in tqdm(range(10)):
sleep(0.5)
client.py
import socket
from subprocess import Popen, PIPE, CalledProcessError
serverAddressPort = ("127.0.0.1", 20001)
bufferSize = 1024
UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
cmd = ['python', 'sample_process.py']
with Popen(cmd, stdout=PIPE, bufsize=0, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
UDPClientSocket.sendto(line.encode(), serverAddressPort)
if p.returncode != 0:
raise CalledProcessError(p.returncode, p.args)
server.py
import socket
UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
UDPServerSocket.bind(("127.0.0.1", 20001))
while(True):
bytesAddressPair = UDPServerSocket.recvfrom(1024)
message = bytesAddressPair[0]
print(message.decode())
如果我打印(p.stdout.read()),那么在结束过程之前我不会得到任何输出。反正有没有实时读取进度条?我在 Windows 11 上使用 Python 3.9.13。