cmd命令行结果保存到txt里,屏幕显示一行就保存一行到txt
#coding:utf-8 """ 1.重定向print 2.python与cmd命令 """ import sys import os import subprocess class Logger(object): def __init__(self, filename="Default.log"): self.terminal = sys.stdout self.log = open(filename, "a") def write(self, message): self.terminal.write(message) self.log.write(message) self.log.flush()#这个用来将屏幕输出一行,就保存到txt一行,而不是等cmd运行完再保存 def flush(self): pass # path = os.path.abspath(os.path.dirname(__file__)) # type = sys.getfilesystemencoding() def main(): #执行cmd命令,无返回值 sys.stdout = Logger("fps_01.txt") cmd="ping baidu.com" #第一种os模块:cmd交互第一种用os.system,无返回,使用前需要import os # os.system(cmd) #第二种os模块:os.popen,也可以写入到txt内,使用Popen模块产生新的process #用os模块的这两种,都是用当前进程来调用,也就是说它们都是阻塞式的 # result = os.popen(cmd) # res=result.read() # for line in res.splitlines(): # print(line) #也可以这样,同样意思 r = os.popen(cmd) info = r.readline() while info: print(info) info = r.readline() #第三种subprocess模块:执行cmd命令,不配合print重写,无返回 # p=subprocess.Popen(cmd,shell=True) # p.wait() # 第三种subprocess模块:执行cmd命令,并读取返回值,屏幕无输出,文件有记录, # 如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法 # p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) # #p.wait() # result_line = p.stdout.readline() # # while result_line: # print(result_line) # result_line = p.stdout.readline() if __name__ == '__main__': main()