在Python中有没有一种方法可以自动确定控制台的宽度?我的意思是指不换行情况下适合一行的字符数,而不是窗口的像素宽度。
编辑
寻找适用于Linux的解决方案。
我正在尝试这里的解决方案,它调用stty size
:
columns = int(subprocess.check_output(['stty', 'size']).split()[1])
stty
会抱怨“stdin不是终端”。我能够像这样使其工作:with open('/dev/tty') as tty:
height, width = subprocess.check_output(['stty', 'size'], stdin=tty).split()
get_terminal_size()
,如先前所建议的。但是,如果您被困在旧版本中并且想要一种简单的跨平台方法来完成此操作,您可以使用asciimatics。该软件包支持Python 2.7及更高版本,并使用与上述建议类似的选项来获取当前终端/控制台大小。Screen
类并使用dimensions
属性以获取高度和宽度即可。这已被证明适用于Linux、OSX和Windows。size = os.get_terminal_size()
-> OSError: [Errno 25] Inappropriate ioctl for device
- Rui Martins使用subprocess
,这是最方便的方法:
导入:
import subprocess
使用示例:
print(subprocess.check_output(['stty', 'size']).split())
int()
函数将其转换为整数。array [0]
=行和array [1]
=列。[b'46', b'188']
W
,您可以这样做:if int(subprocess.check_output(['stty', 'size']).split()[1]) > W:
...
@reannual的回答很好,但它存在一个问题:os.popen
现在已经被弃用。应该使用subprocess
模块,因此这里是@reannual代码的一个版本,它使用subprocess
并直接回答问题(通过将列宽直接作为int
给出):
import subprocess
columns = int(subprocess.check_output(['stty', 'size']).split()[1])
已在 OS X 10.9 上测试
这是一个Linux和Solaris兼容的版本。基于madchine的帖子和评论。需要subprocess模块。
def termsize(): import shlex, subprocess, re output = subprocess.check_output(shlex.split('/bin/stty -a')) m = re.search('rows\D+(?P\d+); columns\D+(?P\d+);', output) if m: return m.group('rows'), m.group('columns') raise OSError('Bad response: %s' % (output))
>>> termsize() ('40', '100')
os.popen
。得票最高的答案展示了使用shutil
的最佳方法。 - wim