Python:当试图迭代子进程输出时,迭代是按字符而不是按lin进行的

2024-10-03 21:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在努力自学python3的系统管理,在这里我做了很多研究

这个函数的目的是调用一个外部命令who-q,并迭代输出,将每一行(用户)包装成HTML标记(保存为最终的total users行)。但是,实际输出是用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")

Tags: in标记htmlliconn字符ulpython3
1条回答
网友
1楼 · 发布于 2024-10-03 21:29:57

欢迎使用stackoverflow,您已经收到了两条说明如何让它工作的评论,请简要说明为什么会发生这种情况:

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

相关问题 更多 >