我的目标是使用ps -u <user>
命令,仅显示pid
中的gtk
和流程名称,textView
中的gtk.scrolledwindow
。
我正在尝试使用以下代码,但它给了我这个错误:
IndexError: list index out of range
有人可以帮助我并告诉我如何才能得到这个吗?
user = os.getenv('USER')
output = subprocess.Popen(['ps', '-u', user], stdout=subprocess.PIPE)
while True:
line = output.stdout.readline().split()
str1 = str(line[0])
str2 = str(line[3])
string = str1 + '\t' + str2
self.textbuffer.insert_at_cursor(string)
if not line:
break
scrolledwindow.add(self.textview)
答案 0 :(得分:3)
看看你的逻辑:你有一个while True:
,你突然与if not line:
。所以,你期望最后得到一个空白。
但在检查该空白行之前,您需要line[0]
(和line[3]
)。因此,最后,您将尝试尝试读取空白行的第1列和第4列,并且没有此类列,因此它是IndexError
。
最简单的解决方法就是移动检查:
while True:
line = output.stdout.readline().split()
if not line:
break
str1 = str(line[0])
str2 = str(line[3])
string = str1 + '\t' + str2
self.textbuffer.insert_at_cursor(string)
更好的解决方法是使用for
循环,而不是尝试使用while
,readline
和break
手动重现其操作:
for line in output.stdout:
bits = line.split()
str1 = bits[0]
str2 = bits[3]
string = str1 + '\t' + str2
self.textbuffer.insert_at_cursor(string)