Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перенаправить вывод python скрипта в log файл без задержек (http://forum.oszone.net/showthread.php?t=352302)

lxa85 05-11-2022 11:28 2995682

Перенаправить вывод python скрипта в log файл без задержек
 
Здравствуйте.
Я несколько в замешательстве.
Есть питоновский скрипт который выполняется достаточно долго.
Я хочу, чтобы его лог (команды print) выводились не в консоль, а в файл.
Уже дошел до
Код:

python.exe p_ping.py | Out-File -Path .\log.txt
Он записывает в файл только по завершению скрипта.
А можно сделать так, чтобы он писал сразу?

NickM 05-11-2022 12:00 2995684

Не уверен, но возможно почитать что-нибудь за:
Код:

[Console]::Out.Flush()
Вот тут предлагается некоторое решение на Ваш вопрос.

Foreigner 05-11-2022 16:42 2995718

Код:

(python.exe p_ping.py) | Out-File -Path .\log.txt

Foreigner 05-11-2022 16:59 2995720

Или, чтобы файл писался по мере выполнения, через Tee-Object
Код:

python.exe p_ping.py | Tee-Object .\log.txt *>$null

Sham 05-11-2022 22:12 2995750

да и так вроде работает python.exe p_ping.py >.\log.txt

lxa85 05-11-2022 23:18 2995751

Я кажется понял (не то, что понял, но локализовал)
Проблема в питоновском скрипте.
Код:

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:  ...

То скрипт ведет себя попроще.

Теперь еще раз вопрос. Что я делаю не так?
Я конечно сам еще поищу ответ, пока только проблему нашел.

Sham 06-11-2022 03:41 2995768

subprocess.run() c stdout=sys.stdout выведет в текущую консоль. check_output() не выводит в консоль, только в переменную (насколько вижу).


Время: 22:18.

Время: 22:18.
© OSzone.net 2001-