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