Невозможно записать вывод постоянно работающего скрипта python в файл - PullRequest
0 голосов
/ 09 мая 2018

У меня есть этот сценарий, который проверяет и ожидает установления некоторых подключений к локальной сети:

import subprocess
import time
import os
import sys
sys.stdout = open('/home/pi/Desktop/file.txt', 'w')


print('checking LAN connections...')
time.sleep(2)
while(True):
    f=open("/sys/class/net/eth0/carrier","r")
    state=f.read()
    if('1' in state):
        print('LAN connection to target device established successfully !')
        break
    else:
        print('Please establish LAN connection to the target device !')
        time.sleep(4)

Я хочу видеть его вывод в указанном файле журнала, но он остается пустым.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Очистить выходной поток после каждой записи. Кажется, вы используете Python 3, поэтому вы можете установить параметр flush для функции print():

print(msg, flush=True)

Если вы используете Python 2, вы можете использовать sys.stdout.flush() и написать функцию ведения журнала:

def log(msg):
    print msg
    sys.stdout.flush()

Возможно, лучше использовать модуль logging. Вот очень простой пример:

import logging
import time

logging.basicConfig(filename='/home/pi/Desktop/file.txt', level=logging.DEBUG)
for i in range(10):
    logging.debug('Please establish LAN connection to the target device !')
    time.sleep(4)

Это добавит к файлу. Если вы хотите перезаписать файл, передайте filemode='w' в basicConfig().

Кроме того, если вам не нравится префикс DEBUG:root:, вы можете использовать format='%(message)s' только для регистрации сообщения:

logging.basicConfig(filename='/home/pi/Desktop/file.txt', filemode='w', level=logging.DEBUG, format='%(message)s')
0 голосов
/ 09 мая 2018

Я считаю, что вы должны закрывать его после каждой записи. Вы можете реализовать оболочку для печати следующим образом:

def print(textlog):
   with open('/home/pi/Desktop/file.txt', 'a') as myfile:
      myfile.write(textlog+"\n")

Ваш код с оберткой должен выглядеть так:

import subprocess
import time
import os

def print(textlog):
   with open('/home/pi/Desktop/file.txt', 'a') as myfile:
      myfile.write(textlog+'\n')

print('checking LAN connections...')
time.sleep(2)
while(True):
    f=open("/sys/class/net/eth0/carrier","r")
    state=f.read()
    if('1' in state):
        print('LAN connection to target device established successfully !')
        break
    else:
        print('Please establish LAN connection to the target device !')
        time.sleep(4)

Редактировать: будьте осторожны, открытие файла с помощью w удалит все содержимое файла и создаст его с нуля. Если вы хотите добавить, вы можете использовать a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...