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")


慕尼黑的夜晚无繁华
浏览 135回答 1
1回答

慕勒3428872

欢迎使用 stackoverflow,您已经收到了两条评论,解释了如何使其工作,只是快速了解为什么会发生这种情况:for 循环遍历一个可迭代对象,在大多数情况下,这是一个列表,并遍历该列表的成员。如果是字符串,它会遍历其字符。您的文本行不会保存在行列表中,而是保存在一个字符串中,换行符保存为\n.&nbsp;所以对于 pythonconnusers只是一个长字符串,它会遍历它的字符。使用@Rakesh和@juanpa.arrivillaga给出的解决方案,您可以将这个长字符串拆分为一个行列表,然后您可以对其进行迭代。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python