【问题标题】:python for loop on subprocess.Popen() and os.system() i get TypeError: 'int' object is not iterablepython for loop on subprocess.Popen() 和 os.system() 我得到 TypeError: 'int' object is not iterable
【发布时间】:2017-06-03 09:27:00
【问题描述】:

假设我写了下面的代码:

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" , shell=True).wait()

  db.sqlite3  ip  manage.py  mysite  
  0

输出之后的额外 '0' 给出了问题。有什么办法摆脱它?

【问题讨论】:

  • 0 是进程的返回码。这意味着它运行没有问题。
  • 您期望system 返回什么可以迭代?调用ls 的结果输出发送到sys.stdout
  • 没关系,如何摆脱错误 TypeError: 'int' object is not iterable
  • 如果你想列出目录,在python中做os.iistdir返回一个你可以迭代的列表。
  • 不要尝试使用进程返回码进行迭代

标签: python python-3.x subprocess os.system


【解决方案1】:

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

由于显而易见的原因,您不能对整数进行迭代,因此您必须获取可迭代的数据。

您想获取作为输出的字符串,对其进行解析并对其进行迭代。 subprocess.check_output() 函数应该是您的选择。

【讨论】:

  • 感谢您一直在寻找。
【解决方案2】:

如果你想要标准输出:

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

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多