我一直在阅读有关python3中子进程的实时处理的可用问题,尽管没有一个能解决我所遇到的确切问题。我正在编写一个脚本来解析相关数据,并为臭名昭著的一天格式化源服务器的输出。你知道吗
当脚本启动时,它将启动臭名昭著的服务器(/多伊什)它提供服务器启动变量,如地图、播放列表、战眼服务器数据等。在某个特定点,服务器脚本正在挂起,等待连接或杀死等事件发生。此时服务器会将其记录到STDOUT,但是我的Python程序会停止输出任何数据,除非您按“enter”键。按“回车”键后,将打印最新的事件数据。你知道吗
是什么导致需要按enter键以获得更多输出?会不会是什么时候多伊什服务器脚本正在等待事件?你知道吗
我当前运行和读取子流程的代码是:
cmd = './doi.sh'
data = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize=1)
如果为真: 输出=数据.stdout.readline() 如果输出=='',并且数据.poll()不是无: 打破 如果输出: 输出=输出.解码('utf-8') 打印(输出) 你知道吗
我构建了一些函数来解析解码字符串中的信息,这些函数在子进程输出的行上工作,但是必须按enter来更新控制台日志会破坏整个程序的功能。你知道吗
这几乎可以肯定是stdout的缓冲问题。尝试按如下方式替换命令:
这将强制
doi.sh
的标准输出取消缓冲。您还需要在subprocess.Popen()
中设置关键字argshell=True
这里有一个很好的解释:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
相关问题 更多 >
编程相关推荐