独立于操作系统的carriage return

2013-04-24 16:24:35 +08:00
 hhrmatata
python有独立于操作系统的换行符os.linesep

现在我想返回到同一行行首,一般是\r,但是这个字符的表现跟操作系统有关,有不有类似os.linesep这种替换?
3304 次点击
所在节点    Python
8 条回复
Mutoo
2013-04-24 16:35:54 +08:00
你可以用 terminal codes 来移动光标位置 http://wiki.bash-hackers.org/scripting/terminalcodes
hhrmatata
2013-04-25 15:25:03 +08:00
@Mutoo 不明白这个是做什么。python中有相应实现吗?
Mutoo
2013-04-25 16:12:18 +08:00
@hhrmatata 你想在文件流中 carriage return,还是在终端中 carriage return?终端的话,\r是在各个平台上是通用的。
况且os.linesep只针对换行,而且对文件的意义比较大。

terminal codes 可以这样用

print 'It is \033[31mnot\033[39m intelligent to use \033[32mhardcoded ANSI\033[39m codes!'
It is not intelligent to use hardcoded ANSI codes!
Mutoo
2013-04-25 16:18:51 +08:00
Mutoo
2013-04-25 16:23:08 +08:00
@hhrmatata print("Hello\033[80DWorld") # \033[80D 向后移动80列(相当于\r)

http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
hhrmatata
2013-04-26 13:32:24 +08:00
@Mutoo 我想在终端中用,\r不是各平台通用吧? \r在Mac OS 中表示换行且返回到下一行的最开始位置,相当于linux 里的 \n 的效果。

表示terminal_control有点过于复杂。

我的目的很简单,下载的时候在终端同一行显示下载进度,后一个进度覆盖前面一个进度。
Mutoo
2013-04-26 13:46:11 +08:00
@hhrmatata 你要的这种效果通常是用\b实现的。参考 #Spinning loading bar#

http://www.stealth-x.com/articles/python-code-tricks.php
hhrmatata
2013-04-27 10:51:30 +08:00
@Mutoo \b 确实可以比较好地实现, sys.stdout.write(line1 + '\b' * len(line1) + line2)

你给的这个博客效果不错啊,很简单地实现了loading...的效果,特别是多线程的考虑比较周到。

非常欣赏博主“Why I hate nerds”这篇文章,尤其作者才17岁,中国教育要加油啊!

最后感谢 @Mutoo 这么耐心的答复。谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/66843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX