Python: при попытке перебора выходных данных подпроцесса итерация выполняется по символам, а не по строкам - PullRequest
0 голосов
/ 10 декабря 2018

Я пытался научить себя Python 3 в отношении системного администрирования, изучая SO.

Цель этой функции - вызвать внешнюю команду 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 Ответ

0 голосов
/ 10 декабря 2018

Добро пожаловать в stackoverflow, у вас уже есть два комментария, объясняющих, как заставить его работать, просто краткая справка, почему это происходит:

цикл for выполняет итерации по итерируемым, в большинстве случаев это списоки он перебирает членов этого списка.В случае строк он перебирает свои символы.Строки вашего текста сохраняются не в списке строк, а в одной строке с разрывами строк, которые сохраняются как \n.Так что для python connusers это просто длинная строка, и она будет перебирать свои символы.С помощью решений, заданных @ Rakesh и @juanpa.arrivillaga, вы разбиваете эту длинную строку на список строк, по которым затем можете выполнять итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...