2010-01-20 84 views
3

如何才能找出字符在交互式shell中使用python结束行之前是否有一行? (通常80)控制台中有多少个字符?

+1

非常罕见的80,除非你的Linux系统坏了,你被困在控制台修复它。 – 2010-01-21 00:06:27

+0

你是对的,在我的控制台中,我有141列 – 2010-01-21 09:05:47

回答

2

可以使用tput工具来查询终端可用的行和列数。您可以使用subprocess.Popen执行:

>>> import subprocess 
>>> tput = subprocess.Popen(['tput', 'cols'], stdout=subprocess.PIPE) 
>>> int(tput.communicate()[0].strip()) 
180 

同样的原理也可以适用通过gregseth查询$COLUMNS变量mentioned

>>> tput = subprocess.Popen(['echo $COLUMNS'], shell=True, stdout=subprocess.PIPE) 
>>> int(tput.communicate()[0].strip()) 
180 

最后,如果你使用的curses库OK这样一个简单的问题,如Ignacio Vazquez-Abrams的proposed,然后请注意,您需要执行三条语句,而不是一条:

>>> import curses 
>>> curses.setupterm() 
>>> curses.tigetnum('cols') 
180 

如果终端调整大小,则在使用tigetnum查询新终端宽度之前,需要调用setupterm

3

我不知道具体在python,
但在shell中环境变量$COLUMNS包含您想要的信息。

3
+6

在你这样做之前,首先执行'import curses'然后执行'curses.setupterm()'。 – Stephan202 2010-01-20 21:38:36

+0

另请参阅'curses.wrapper':http://docs.python.org/3.1/library/curses.html#module-curses.wrapper – 2010-01-21 00:52:25

0

在* nix只

>>> import sys,struct,fnctl,termios 
>>> fd = sys.stdin.fileno() 
>>> s = struct.pack("HH", 0,0) 
>>> size=fcntl.ioctl(fd, termios.TIOCGWINSZ,s) 
>>> struct.unpack("HH", size)[-1] 
157 
+0

我过去曾经使用过这种方法,但它对我来说仍然没有意义。 – jathanism 2010-01-21 01:26:12