在txt文件中整齐地编写Python输出?

时间:2018-09-15 16:29:18

标签: python file

我正在尝试创建一个程序,该程序列出Windows计算机上所有正在运行的服务并将其保存到txt文件中。我可以使用它,但是它并没有像我在Python shell中的输出那样逐行列出。此外,还有我不希望添加的括号。请参阅下面的输出vs txt文件屏幕截图。而且,我的代码在下面。

Output vs txt file

到目前为止,我的代码:

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 :(得分:1)

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

答案 1 :(得分:1)

感谢您的帮助!

这就是窍门:

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

答案 2 :(得分:0)

您需要在字符串末尾添加换行符,如下所示:

f.write(str(statuses)+"\n")

答案 3 :(得分:0)

您在这里遇到一些问题。

首先,您每次在循环中都会覆盖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')