有没有一种简单的方法来读取子进程无缓冲的输出?我正在尝试从Java调用一个C程序,但显然当连接到管道时它是stdout块缓冲,只有在连接到控制台时才进行行缓冲.我无法修改C程序.
也许有办法欺骗程序认为它连接到控制台?对于适用于Linux的解决方案的奖励积分.
我的问题是,我希望能够在python控制台中覆盖/清除以前的打印行.这个问题已被多次询问(例如,Python - 删除和替换打印项目),但是使用相同的代码(答案标记为正确,对我来说什么都没打印):
for i in range(10):
print("Loading" + "." * i)
time.sleep(1)
sys.stdout.write("\033[F") # Cursor up one line
sys.stdout.write("\033[K") # Clear to the end of line
Run Code Online (Sandbox Code Playgroud)
我得到输出(在python IDLE中):
Loading
[F[KLoading.
[F[KLoading..
[F[KLoading...
[F[KLoading....
[F[KLoading.....
[F[KLoading......
[F[KLoading.......
[F[KLoading........
[F[KLoading.........
[F[KLoading..........
[F[K
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我google了很多,没有什么工作真的.它可以打印出任何内容,也可以不覆盖.
如果这有帮助,我运行的是Windows 8.1和Python 3.51.通过cmd运行代码不会影响任何内容.
此外,添加sys.stdout.flush()没有帮助.