Написать вывод Python аккуратно в текстовом файле? - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать программу, которая перечисляет и сохраняет все запущенные службы на моем компьютере с Windows в текстовый файл. Я получил его на работу, но он не перечисляет построчно, как в моем выводе в оболочке Python. Также есть добавленные круглые скобки, которые я не хочу. См. Вывод против скриншота файла txt ниже. Кроме того, мой код ниже.

Вывод vs текстовый файл

Мой код до сих пор:

import win32con
import win32service

#Define ListServices class
def ListServices():
    resume = 0
    accessSCM = win32con.GENERIC_READ
    accessSrv = win32service.SC_MANAGER_ALL_ACCESS

    #Open Service Control Manager
    hscm = win32service.OpenSCManager(None, None, accessSCM)

    #Enumerate Service Control Manager DB
    typeFilter = win32service.SERVICE_WIN32
    stateFilter = win32service.SERVICE_ACTIVE

    statuses = win32service.EnumServicesStatus(hscm, typeFilter, stateFilter)

    for (short_name, desc, status) in statuses:
        #Save output to txt file
        f=open('MyServices.txt', 'w')
        f.write(str(statuses))
        f.close()
        #Print output and append 'Running' at the end of each line
        print(desc, status, '----------> Running') 

ListServices();

Ответы [ 4 ]

0 голосов
/ 15 сентября 2018

Спасибо за вашу помощь, ребята!

Вот что сделал трюк:

    with open('MyServices.txt', 'w') as f:
        for (short_name, desc, status) in statuses:
            f.write(str(desc))
            f.write(str(status))
            f.write('----------> Running')
            f.write(os.linesep)
            #Print output and append 'Running' at the end of each line
            print(desc, status, '----------> Running') 
0 голосов
/ 15 сентября 2018

write не добавляет новую строку, как print, поэтому вы должны позаботиться об этом самостоятельно.Также обратите внимание, что нет причин открывать и закрывать файл на каждой итерации.Просто оставьте его открытым, сколько вам нужно:

with open('MyServices.txt', 'w') as f:
    for (short_name, desc, status) in statuses:
        f.write(str(statuses))
        f.write(os.linesep)
        #Print output and append 'Running' at the end of each line
        print(desc, status, '----------> Running') 
0 голосов
/ 15 сентября 2018

У вас есть несколько вопросов здесь.

Сначала вы перезаписываете свой файл MyServices.text каждый раз в цикле.Поэтому вы должны открыть свой файл вне цикла.

Во-вторых, вы пишете кортеж statuses в своем коде.Вместо этого вы должны написать отдельную строку, как вы делаете в print

В-третьих, f.write не добавляет новую строку, как print.Поэтому вам нужно вручную добавить новую строку в функцию записи.

# Open MyServices.txt outside loop so you don't overwrite the file on each iteration
with open('MyServices.txt', 'w') as f:    
    for (short_name, desc, status) in statuses:
         # Write each status line individually and manually add a newline to the output.
         f.write("{}, {}, {}\n".format(short_name, desc, status))
         print(desc, status, '----------> Running') 
0 голосов
/ 15 сентября 2018

Вам необходимо добавить символ новой строки в конце вашей строки, например:

f.write(str(statuses)+"\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...