为了账号安全,请及时绑定邮箱和手机立即绑定

Python:尝试迭代子进程输出时,迭代是按字符而不是按行

Python:尝试迭代子进程输出时,迭代是按字符而不是按行

慕尼黑的夜晚无繁华 2021-09-11 20:15:48
我一直在尝试通过在 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")
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信