首页 > 解决方案 > Python:尝试迭代子进程输出时,迭代是按字符而不是按行

问题描述

我一直在尝试通过在 SO 上做和研究来自学有关系统管理的 Python 3。

该函数的目的是调用外部命令 who -q 并迭代输出,将每一行(用户)包装在 HTML 标记中(保存最后的总用户行)。但是,实际输出是包裹在 HTML 标记中的每个字符。

我不知道为什么它在每个字符上进行迭代,或者如何让它逐行迭代。

 connusers = str(subprocess.check_output("who -q; exit 0", stderr=subprocess.STDOUT, shell=True).decode())

 conntable.write("<ul>\n")
 for conn in connusers:
     if "#" not in conn:
         conntable.write("<li>"+ conn +"</li>\n")
 conntable.write("</ul>\n")

标签: pythonpython-3.xsubprocess

解决方案


欢迎来到 stackoverflow,您已经收到了两条评论,解释了如何让它工作,只是快速说明为什么会发生这种情况:

for 循环遍历一个可迭代对象,在大多数情况下,这是一个列表,它遍历该列表的成员。如果是字符串,它会迭代其字符。您的文本行不会保存在行列表中,而是保存在一个字符串中,换行符保存为\n. 所以对于 pythonconnusers来说只是一个长字符串,它会遍历它的字符。使用@Rakesh@juanpa.arrivillaga给出的解决方案,您可以将这个长字符串拆分为一个行列表,然后您可以对其进行迭代。


推荐阅读