Показать полную графическую версию : [решено] Перенаправить вывод python скрипта в log файл без задержек
Здравствуйте.
Я несколько в замешательстве.
Есть питоновский скрипт который выполняется достаточно долго.
Я хочу, чтобы его лог (команды print) выводились не в консоль, а в файл.
Уже дошел до
python.exe p_ping.py | Out-File -Path .\log.txt
Он записывает в файл только по завершению скрипта.
А можно сделать так, чтобы он писал сразу?
Не уверен, но возможно почитать что-нибудь за:
[Console]::Out.Flush()
Вот тут (https://superuser.com/a/1371993) предлагается некоторое решение на Ваш вопрос.
Foreigner
05-11-2022, 16:42
(python.exe p_ping.py) | Out-File -Path .\log.txt
Foreigner
05-11-2022, 16:59
Или, чтобы файл писался по мере выполнения, через Tee-Object
python.exe p_ping.py | Tee-Object .\log.txt *>$null
да и так вроде работает python.exe p_ping.py >.\log.txt
Я кажется понял (не то, что понял, но локализовал)
Проблема в питоновском скрипте.
def pingOk(sHost):
try:
output = subprocess.check_output("ping -n 1 {}".format(sHost), shell=True)
except Exception:
return False
return True
ip_list = ['ya.ru']
for ip in ip_list:
print(ip, ' ', pingOk(ip))
Если я вызываю пинг через subprocess то скрипт начинает страдать ерундой, хотя в консоли этого не видно.
Если пинг запускать через
response = os.system("ping -n 1 " + hostname)
if response == 0: ...
То скрипт ведет себя попроще.
Теперь еще раз вопрос. Что я делаю не так?
Я конечно сам еще поищу ответ, пока только проблему нашел.
subprocess.run() c stdout=sys.stdout выведет в текущую консоль. check_output() не выводит в консоль, только в переменную (насколько вижу (https://github.com/python/cpython/blob/e0fc2b3fd1f752e798d210971b2dbf3dc84c7b47/Lib/subprocess.py#L417)).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.