在python中格式化ps -u输出

时间:2015-04-17 07:35:54

标签: python python-2.7

我的目标是使用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)

1 个答案:

答案 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循环,而不是尝试使用whilereadlinebreak手动重现其操作:

for line in output.stdout:
    bits = line.split()
    str1 = bits[0]
    str2 = bits[3]
    string = str1 + '\t' + str2
    self.textbuffer.insert_at_cursor(string)