2015-04-17 82 views
-1

我的目標是讓使用ps -u <user>命令,只有pidgtk進程名,textViewgtk.scrolledwindow顯示。格式化PS -u輸出

我用下面的代碼嘗試,但它給我這個錯誤:

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) 
+2

報告錯誤時,發佈導致錯誤的確切行是有幫助的。 – DNA

+0

你有一個列表,你試圖訪問它的一個項目,你給它的索引(可能是3)不在範圍內。這個錯誤並不難以破譯 –

+0

str1 = str(line [0]) IndexError:列表索引超出範圍 – ShobhitSaxena

回答

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) 

一個更好的解決辦法是使用,而不是試圖重現它與whilereadline手工做了for循環,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) 
+0

非常感謝..讓我試試這個.. – ShobhitSaxena