如何使用subprocess / os.system获取实时输出并将输出记录到log.txt中?

时间:2019-01-07 08:53:17

标签: python python-3.x windows

我正在尝试获取实时窗口tracert的输出,同时将日志保存到log.txt

这是将输出保存到log.txt文件的代码。

import sys

class Tee(object):
  def __init__(self, log_fname, mode='a'):
    self.log = open(log_fname, mode)

  def __del__(self):
    sys.stdout = sys.__stdout__
    sys.stdir = sys.__stdin__
    sys.stderr = sys.__stderr__
    self.log.close()

  def write(self, data):
    self.log.write(data)
    self.log.flush()
    sys.__stdout__.write(data)
    sys.__stdout__.flush()

  def readline(self):
    s = sys.__stdin__.readline()
    sys.__stdin__.flush()
    self.log.write(s)
    self.log.flush()
    return s

  def flush(foo):
    return

sys.stdout = sys.stderr = sys.stdin = Tee('log.txt', 'w')

我在Getting realtime output using subprocess上阅读了几乎类似的主题,但是由于我对subprocess模块还是陌生的,所以解决方案还没有运气。

这是我在{3}中使用tracertsubprocess模块的os.system尝试。

第一次尝试

IP = '10.2.2.2'

代码

print(subprocess.check_output('tracert %s' % IP, shell=True, universal_newlines=True))

控制台输出不实时

Tracing route to 10.2.2.2 over a maximum of 30 hops

  1     1 ms     1 ms    <1 ms  10.1.1.1
  2    <1 ms     1 ms     1 ms  10.2.2.2

Trace complete.

log.txt

Tracing route to 10.2.2.2 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  10.1.1.1 
  2     1 ms     1 ms    <1 ms  10.2.2.2 

Trace complete.

第二次尝试

代码

print(subprocess.run('tracert %s' % IP, shell=True, universal_newlines=True))

控制台输出=实时,具有附加的CompletedProcess(args='tracert 10.2.2.2', returncode=0

Tracing route to 10.2.2.2 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  10.1.1.1
  2    <1 ms    <1 ms    <1 ms  10.2.2.2

Trace complete.
CompletedProcess(args='tracert 10.2.2.2', returncode=0)

log.txt =不好

CompletedProcess(args='tracert 10.2.2.2', returncode=0)

第三次尝试

代码

os.system('tracert %s' % IP)

控制台输出=确定,实时

Tracing route to 10.2.2.2 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  10.1.1.1
  2    <1 ms     1 ms    <1 ms  10.2.2.2

Trace complete.

log.txt =没事

第四次尝试

代码

print(os.system('tracert %s' % IP))

控制台输出=确定,实时

Tracing route to 10.2.2.2 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  10.1.1.1
  2    <1 ms     1 ms    <1 ms  10.2.2.2

Trace complete.

log.txt = 0

0

是否可以获取实时tracert输出并同时将控制台上的所有内容(完全相同)记录到log.txt文件中?

如果有更简便的方法,请告诉我。

0 个答案:

没有答案