Python Flask con server Waitress non può essere eseguito, quando lo rende come un servizio Windows

ho costruito un’applicazione Python con Flask ed eseguito con il server Waitress.

l’applicazione utilizza i file .csv locali come dati di input.

può funzionare bene quando funziona da linea di comando. (IE. Python webserver.py), Posso caricare csv per leggere i dati, caricare (per sovrascrivere) i file csv.

ma quando lo aggiungo come servizio di una finestra (con NSSM, o Window Resource Kit), la mia app può essere eseguita, ma i file csv possono essere caricati solo da JS, non dal python.

significa, in modalità di servizio, se carico csv utilizzando js, È ok, ma durante il caricamento o il caricamento di file (utilizzando lo script python) restituisce “Errore server interno”.

la mia domanda è, come sono in esecuzione da linea di comando e l’aggiunta come servizio di Window diverso? come fare python script funziona con il file csv quando lo rende come servizio?

qualsiasi aiuto è apprezzato. grazie mille.

questo è il codice di upload.

@app.route('/uploadss', methods = ['GET', 'POST'])
def upload():
    import os
    print(request.files['file'])
    if request.method=='POST':
        file = request.files['file']
        filenames = ['temperature.csv','inlet_clean_info.csv','log_data.csv','medium-term-temperature.csv']
        if file.filename in filenames:
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
            return 'file uploaded successfully'
        else:
            return 'filename is not acceptable'

e ho aggiungere cameriera webserver come servizio con:

> -(nssm) nssm.exe install MyService. Then add python path and the executed python file.
> -(Window ResKit) instsrv.exe LNG c:\reskit\srvany.exe. Then add "Parameter" key in Regedit, add "Application" String to point to <python path> <executed path>

in entrambi i casi, restituisce “Internal Server Error”

questo è il messaggio di errore, la risposta restituita

” 500
Internal Server Error

Internal Server Error

The
server encountered an internal error and was unable to complete your
request. Either the server is overloaded or there is an error in the
application.

EN From: Python Flask with Waitress server cannot run, when making it as a Windows service

More similar articles:

2 Comments

  1. le differenze principali durante l’esecuzione di un’applicazione come servizio sono intorno all’ambiente.

    alcune cose in particolare:

    quale utente il servizio è in esecuzione come.
    quando si avvia dalla riga di comando, è probabile che sia in esecuzione come account utente. il tuo account utente potrebbe avere autorizzazioni diverse dall’account di sistema di Windows. questo tende a causare problemi con l’accesso ai file più che, per esempio, l’apertura di una porta per un server HTTP. ci possono essere altri problemi relativi ai permessi.

    variabili d’ambiente, incluso PATH.
    quando si è in una shell di comando, windows ha una variabile PATH che indica dove cercare i file eseguibili. quindi, se si digita python che cerca python.exe nella cartella corrente, poi cerca attraverso la variabile PATH fino a trovare python.exe

    esistono anche altre variabili d’ambiente che possono essere definite come TMP (cartella temporanea), ecc.

    quando è in esecuzione come servizio, è generalmente in esecuzione in un contesto utente diverso, che avrà diverse variabili d’ambiente, sia il% TMP% e PATH. quindi una cosa che potrebbe accadere è che si sta cercando di eseguire python.exe, ma non c’è python.exe sul percorso per l’utente di servizio.


    se
    la tua applicazione utilizza il Registro di sistema, e utilizza l’albero HKEY _ CURRENT _ USER, questo è probabilmente diverso quando è in esecuzione come un servizio. (HKEY _ CURRENT _ MACHINE è probabilmente la stessa).


    la cartella che l’applicazione inizia in
    Quando si esegue dalla riga di comando, generalmente si avvia nella cartella corrente. questo significa che è possibile utilizzare percorsi relativi (ad esempio .\images) invece dei percorsi assoluti (c:\website\images).

    se dovessi cambiare in una cartella diversa, allora la versione .\images potrebbe non funzionare.

    quando un programma viene eseguito come servizio, di solito sembra iniziare in C:\Windows\System32

    così si potrebbe indagare se utilizzando percorsi assoluti funziona. oppure si potrebbe indagare se c’è un modo per specificare la cartella di avvio.

    un’altra cosa da controllare (possibilmente prima) – cercare il file di log

    normalmente i server web scrivono un file di log sul server da qualche parte.

    l’errore 500 andrebbe all’utente, ma ci sarebbe un errore più dettagliato scritto in un log. quindi trovare dove dovrebbe essere quel file di log e verificarlo. (è possibile che non sia dove dovrebbe essere, e che potrebbe essere a che fare con i permessi associati con l’Utente il servizio è in esecuzione come). se è lì, può aiutare a rintracciare il problema particolare.

    1. grazie mille.

      la risposta mi fa credere che si tratta di cartella di avvio. ed è così.

      l’impostazione della cartella di avvio nella cartella del codice sorgente ha risolto il problema. (il parametro directory di avvio di NSSM)

      grazie ancora, hai salvato la mia giornata.

Leave a Reply

Your email address will not be published. Required fields are marked *