Tom*_*omM 8 python console-application carriage-return pycharm
我有一个 Python 程序,它广泛使用换行符来产生更新控制台行(特别是进度条)的效果。
在尝试调试 PyCharm 中的代码时,我看到进度条在完成之前不会被打印出来。
进一步检查发现,当\r打印回车 ( ) 时,整行都被删除了。
因为库本身写入形式为 ( {line}\r) 的字符串,所以我总是得到一个空行。
有没有办法使用 PyCharm 解决这个问题?目前我要做的是用stdout记录当前行的版本替换并在收到回车后重新打印它。但是,我更愿意有一个简单的方法来做到这一点。
示例代码:
import sys
sys.stdout.write('xxx')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('\rZZ')
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('yyy\r')
sys.stdout.flush()
time.sleep(1)
print ('===')
Run Code Online (Sandbox Code Playgroud)
我的运行看起来像这样:
1. 'xxx' 打印
[1 秒后]
2. 'ZZ' 打印
[1 秒后]
3. 该行被删除
[1 秒后]
4. '=== 打印然后程序终止
运行此脚本时,这会在调试和运行控制台中发生。
我最近遇到了同样的问题,并找到了解决方案。答案实际上在您的帖子中。正如你所说,回车删除整行。为避免此问题,请仅在打印新行时打印回车,如下所示:
打印每一行的开头带有回车符,并且没有默认的 end='\n'。不需要冲洗,虽然我没有做太多测试。
print('\rxxx', end='')
# sys.stdout.flush()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
继续这样...
print('\rZZ', end='')
time.sleep(1)
print('\ryyy', end='')
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
要保留上次打印输出,请保留默认结尾。
print('\r===')
Run Code Online (Sandbox Code Playgroud)
希望这对你有用。
坦率
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |