Я пытаюсь получить в реальном времени вывод 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')
Я читал почти похожую тему здесь Получение вывода в реальном времени с использованием подпроцесса , но мне пока не повезло с решениями, так как я все еще новичок в модуле subprocess
.
Вот мои tracert
попытки в Python3 с subprocess
и os.system
модулем.
1-я попытка
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.
2-я попытка
Код
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)
3-е попытки
Код
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
= Ничего
4-е попытки
Код
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
?
Если есть более простой / лучший способ сделать это, пожалуйста, дайте мне знать.