2010-01-20 61 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