1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

from __future__ import absolute_import, print_function 

 

# 

# This file is NOT part of Pyrocko. 

# 

# Code is considered public domain, based on 

# https://gist.github.com/jtriley/1108174 

# 

 

import os 

import struct 

import platform 

import subprocess 

 

 

def get_terminal_size(): 

''' 

Get terminal size. 

 

Works on linux,os x,windows,cygwin(windows) 

 

originally retrieved from: 

http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python 

''' 

 

current_os = platform.system() 

tuple_xy = None 

if current_os == 'Windows': 

tuple_xy = _get_terminal_size_windows() 

if tuple_xy is None: 

tuple_xy = _get_terminal_size_tput() 

# needed for window's python in cygwin's xterm! 

 

if current_os in ['Linux', 'Darwin'] or current_os.startswith('CYGWIN'): 

tuple_xy = _get_terminal_size_linux() 

 

if tuple_xy is None: 

tuple_xy = (80, 25) # default value 

 

return tuple_xy 

 

 

def _get_terminal_size_windows(): 

try: 

from ctypes import windll, create_string_buffer 

# stdin handle is -10 

# stdout handle is -11 

# stderr handle is -12 

h = windll.kernel32.GetStdHandle(-12) 

csbi = create_string_buffer(22) 

res = windll.kernel32.GetConsoleScreenBufferInfo(h, csbi) 

if res: 

(bufx, bufy, curx, cury, wattr, 

left, top, right, bottom, 

maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw) 

sizex = right - left + 1 

sizey = bottom - top + 1 

return sizex, sizey 

except Exception: 

pass 

 

 

def _get_terminal_size_tput(): 

# get terminal width 

# src: http://stackoverflow.com/questions/263890/how-do-i-find-the-width-height-of-a-terminal-window # noqa 

try: 

cols = int(subprocess.check_call(['tput' 'cols'])) 

rows = int(subprocess.check_call(['tput', 'lines'])) 

return (cols, rows) 

except Exception: 

pass 

 

 

def _get_terminal_size_linux(): 

 

def ioctl_GWINSZ(fd): 

try: 

import fcntl 

import termios 

cr = struct.unpack( 

'hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) 

return cr 

except Exception: 

pass 

 

cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) 

 

if not cr: 

try: 

fd = os.open(os.ctermid(), os.O_RDONLY) 

cr = ioctl_GWINSZ(fd) 

os.close(fd) 

except Exception: 

pass 

 

if not cr: 

try: 

cr = (os.environ['LINES'], os.environ['COLUMNS']) 

except Exception: 

return None 

 

return int(cr[1]), int(cr[0]) 

 

 

if __name__ == "__main__": 

sizex, sizey = get_terminal_size() 

print(sizex, sizey)