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

  

posted @ 2019-04-15 12:20  Niuuer  阅读(1122)  评论(0编辑  收藏  举报