[PYTHON] redirect stdout do suboru

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod DanHen 19. 12. 2019 14:05

zdravim,
pomozte mi prosim presmerovat vystup z flasku niekam do suboru.
o co konkretne mi ide: flask robi nejaku konzolu nejake vystupy. taketo:
https://ctrlv.cz/zy3i

ked sa niekde nieco zosype, nastane jinja error, taktiez je toto v konzole. konzola ma obmedzenu zivotnost, cize je tam urcity pocet riadkov. ked mam flask app spustenu ako service, konzolu vobec nevidim. chcel by som presmerovat celu tuto konzolu niekam do suboru. uz sa s tym babrem velmi dlho, a k nicomu som nedospel.
skusil som najprv klasiku: python.exe main_server.py >console.txt. toto mi vobec nefunguje.
skusil som googlit a stackoverflowovat napriklad tu:
https://stackoverflow.com/questions/467 ... 2#22434262
https://stackoverflow.com/questions/149 ... -scripting
https://stackoverflow.com/questions/395 ... ask-python
https://stackoverflow.com/questions/354 ... n-log-file
a kopec dalsich.
skusil som logger:
https://docs.python.org/3/library/loggi ... eamHandler
https://flask.palletsprojects.com/en/1.1.x/logging/
https://docs.python.org/2/howto/logging.html
bez vysledku. niekde sa dopracujem k niecomu, napriklad mi to napise do suboru ze debugger is active. ale kompletny log, kompletnu konzolu, tak, ako je na screenshote proste neviem odchytit. bezi mi vo firme niekolko instancii flaskovych serverov. kedze konzola ma obmedzenu zivotnost, tak sa neviem po vikende dopracovat k udajom povedzme zo soboty rana. hlasky, ktore potrebujem, rozne printy a ine samozrejme viem logovat, namiesto puheho print pouzijem napriklad nieco taketo:
Kód: Vybrat vše
def logger(xdata:str, xfile="log.txt"):
    try:
        swrite = open(xfile, "a+")
        swrite.write(xdata+"\n")
        swrite.close
        print(xdata)
    except:
        pass

a namiesto print zavolam:
logger("hello world")
a hello world mam zapisany v subore log.txt.
mne vsak ide o kompletnu konzolu, o kompletne presmerovanie celeho vystupu. viem, ze sa to nejak da, pretoze napriklad spyder alebo visual studio code to vie - vypisuje konzolu u seba. ja to vsak neviem nijakym sposobom dosiahnut.
pomoze mi s tym niekto, prosim?

python version: 3.6.8 (sucast anaconda package 5.2.0)
os version: Microsoft Windows 10 Enterprise 64-bit

dakujem :)
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 19. 12. 2019 15:40

Nevím jestli tohle pomůže -doufám že ano
https://www.scalyr.com/blog/getting-sta ... k-logging/
Logging to a File
So let’s take care of saving logs to a persistent medium. We’ll send them to a file in the same directory as the application.

Go to your app.py and update the configuration.
Kód: Vybrat vše
from flask import Flask
import logging

app = Flask(__name__)


logging.basicConfig(filename='demo.log', level=logging.DEBUG)
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod DanHen 19. 12. 2019 15:57

bohuzial nie. na toto som tiez samozrejme natrafil. konkretne toto loguje DEBUG - cize zaloguje mi ze debugger started atd ... ale udaje, ktore su zobrazene na screnshote, ktory som pastol, toto neloguje. je viac levelov logovani, su popisane napriklad tu: https://docs.python.org/2/howto/logging.html (debug, info, warning, error, critical). ani jeden z tychto levlov mi neloguje informacie, ktore su na screenshote. na scrshote nie su napriklad POST a GET eventy. vidno ich tu: https://ctrlv.cz/4wRq
tam vidno, ze sa udiala POST metoda (klikol som na button, ktory mam na stranke) a tiez GET - natiahlo mi css fajly. konkretne tieto veci neviem absolutne nikdy a nicim logovat :(
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 19. 12. 2019 20:03

Bohužel - do těchto věcí moc nevidím.
Ještě jsem našel toto - snad to pomůže
https://stackoverflow.com/questions/177 ... -to-a-file
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 19. 12. 2019 20:47

Ja jsem to resil pred par mesici, v kodu mam tohle:

Kód: Vybrat vše
from logging.handlers import TimedRotatingFileHandler

app = Flask(__name__)

if __name__ == '__main__':
    handler = TimedRotatingFileHandler('/var/log/inframonitoring/flask.log', when='W0', backupCount=5)
    handler.setLevel(logging.DEBUG)
    app.logger.addHandler(handler)

    app.run()


-- 19. 12. 2019 19:50 --

Pokud chces logovat opravdu primo jednolive requesty, tak viz dokumentace:

https://flask.palletsprojects.com/en/1. ... nformation
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod DanHen 20. 12. 2019 14:17

@Just_jo: tu som uz tiez bol. presiel som vsetky posty na stackoverflow, ktore som k tomu nasiel. nic z toho mi nijak zvlast nepomohlo.
@JirkaVejrazka: dakujem za tip, skusim to implementovat do kodu, ale podla toho, ako vidim, ako je to robene to asi nebude nic, cim by som bol nejak extra nadseny :(
to sa ozaj nijak neda presmerovat out vystup niekde do filu? ja viem, ze python je viac linuxovy, ako windowsovy, ale, paneboze, ved toto je zakladna vec! uz to, ze nejde standardny commandline redirect (ako napriklad dir *.* >files_list) ma mierna zarazilo, ale ze s tym budu taketo obstrukcie, to som ozaj necakal. pritom, ako pisem vyssie, urcite sa to da, preto spyder to vie a (momentalne ako editor pouzivam visual studio code) visual studio code to vie tiez, kedze pri spusteni proste chyta kompletnu konzolu do svojho prostredia, co aj obmedzene velkostou (pravdepodobne rovnaky limit ako cmd konzola), ale aspon nieco! uz si napisat programcek, ktory by kopiroval dany vystup kazdych povedzme 10 minut niekam a potom nejaky 'spajac' by bolo najmenej. problem ostava, akym sposobom logovat vsetko.
pozrem sa na kod od JirkaVejrazka a uvidim.
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 21. 12. 2019 23:27

Jestli ti jde jenom o presmerovani do souboru, tak to samozrejme muzes:
Kód: Vybrat vše
python muj_flask_server.py > stdout.log 2> stderr.log


Myslel jsem, ze ti jde o kod, ktery bude logovat do souboru. Jestli ti staci jen presmerovani kozole, tak to jde standardni cestou.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod DanHen 11. 1. 2020 19:37

@Jirka: a praveze toto nijak nejde. to je presne to, co chcem, ale vystupny subor je prazdny. to bolo samozrejme prve co som skusil, ale proste to nefunguje :(
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků