2017-06-03 75 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) 
相关问题