2017-06-03 67 views
-1

說,我已經寫婁代碼:蟒蛇對subprocess.Popen環路()和使用os.system()我得到類型錯誤:「詮釋」對象不是可迭代

import os 
import subprocess 

for i in os.system('ls'): 
    print i 

我有以下錯誤:

Traceback (most recent call last): 
File "<console>", line 1, in <module> 
TypeError: 'int' object is not iterable 

當我嘗試做相同的subprocess.Popen

for i in subprocess.Popen("ls" , shell=True).wait(): 
    print i 

我有同樣的問題。如果我只做做使用os.system( 'LS')或subprocess.Popen( 「LS」,殼=真).wait()

db.sqlite3 ip manage.py mysite 
    0 

額外 '0',輸出後未來是給出問題。任何方式擺脫它?

+0

'0'是進程的返回碼。這意味着它運行沒有問題。 –

+0

你期待'系統'返回,你可以迭代?調用'ls'的結果被輸出到'sys.stdout'。 –

+0

那好吧,如何擺脫錯誤TypeError:'int'對象不可迭代 – ilak

回答

0

os.system()returns the return value(0,如果成功)。

由於顯而易見的原因,你不能迭代一個整數,所以你必須得到可迭代的數據。

你想得到輸出的字符串,解析它,然後遍歷它。 subprocess.check_output()函數應該是你的方法。

+0

謝謝,這是我尋找。 – ilak

+0

樂意幫忙。 請回復你的問題。 – IsaacDj

0

如果你想標準輸出:

proc = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE) 
for line in proc.stdout: 
    print(line) 
相關問題