卡死在sys.stdout.buffer.write(cmd.encode(code))

我是在一个软件上,开发脚本,软件接受的接口就是
sys.stdout,写入特定格式的字符就会调用软件内的指令。
目前我卡死在如下接口:
写法1:
sys.stdout.write(cmd)
sys.stdout.buffer.flush()
这个软件内跑Python脚本和Python TQ/TK脚本都OK。
但是Windows平台不支持中文。

于是我改成了
写法2:
code = sys.getdefaultencoding()
sys.stdout.buffer.write(cmd.encode(code))
sys.stdout.buffer.flush()
中文问题是解决了,但是严重的问题来了:
写法2:软件内直接跑Python脚本OK,但是如果是跑Python TQ的脚本,比如启动TQ Gui界面,点push button执行软件的指令,软件就卡死。好像就去不到 sys.stdout.buffer.flush 或 直接flush.

无解了。请问可能是什么问题?有什么解法?

最佳答案

嗯,应为基本主要代码就这两行。后来解决问题了。
发现是在这之前有使用过print, 就会卡死。
所以在
在sys.stdout.buffer.write之前先flush一下就OK了。
不过原理还没有搞懂。 和sys.stdout的缓存有关?

目前新的问题是: sys.stdout已经被我的软件占用了, 所有sys.stdout.write的结果直接到了软件端,无法输出到terminal。
我只有写sys.stderr才能打印到terminal。
不知道有解没有。 强制把 sys.stdout.write 写到terminal,而不写到我的软件的接口中?

3年前 评论
讨论数量: 3
Jason990420

没有针对您问题的配置和簡短的完整代码,这将阻止人们检查您的问题并为您找到答案。

3年前 评论

嗯,应为基本主要代码就这两行。后来解决问题了。
发现是在这之前有使用过print, 就会卡死。
所以在
在sys.stdout.buffer.write之前先flush一下就OK了。
不过原理还没有搞懂。 和sys.stdout的缓存有关?

目前新的问题是: sys.stdout已经被我的软件占用了, 所有sys.stdout.write的结果直接到了软件端,无法输出到terminal。
我只有写sys.stderr才能打印到terminal。
不知道有解没有。 强制把 sys.stdout.write 写到terminal,而不写到我的软件的接口中?

3年前 评论
Jason990420

猜一下, sys.__stdout__ ?

3年前 评论
gufeng0176 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!