Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Python] Problema esecuzione comando e locazione file

    ciao!

    sto cercando di eseguire un comando passando il path del file dinamicamente.
    questa la classe:
    codice:
    from subprocess import call
    import sys
    
    
    class ImportSql:
        def execImport(self, fileSql):
            try:
                call("mysql -u UTENTE -pPWD DB_NAME < " + fileSql)
            except BaseException as ex:
                print(fileSql)
                print(ex)
                sys.exit()
    e questo come richiamo il file:
    codice:
    from ImportSql import *
    
    if __name__ == '__main__':
        imp = ImportSql()
        imp.execImport('C:\\file.sql')
    il file c'è, lo vedo!!
    eppure mi esce questo errore:
    codice:
    C:\file.sql
    [WinError 2] The system cannot find the file specified
    sinceramente non riesco a capire dove sbaglio!
    Ultima modifica di fermat; 05-05-2017 a 16:17

  2. #2
    allora, il primo problema stava nel fatto che mysql non era nel path delle variabili di sistema.
    adesso l'ho impostato, ed il comando viene eseguito.

    solo che mi da errore sulle opzioni.
    sono andato sulla pagina del modulo subprocess, ed ho visto che le opzioni andrebbero divise.
    solo che non come suddividere gli argomenti.
    ho provato così, ma ottengo l'errore di mysql:
    codice:
    subprocess.run(["mysql", "-u", "USER", "-pPWD", "DB_NAME", " < " + fileSql])

  3. #3
    ho fatto un altro pò di prove.
    ad esempio questa:
    codice:
    from subprocess import Popen, PIPE
    import sys
    
    
    class ImportSql:
        def execImport(self, fileSql):
            try:
                proc = Popen(["mysql", "DB_NAME", "-u", "USER", "-pPASSWORD"], stdin=PIPE, stdout=PIPE)
                proc.communicate('source ' + fileSql)[0]
            except BaseException as ex:
                print("ERROR:", ex)
                sys.exit()
    ma ottengo questo errore:
    codice:
    ERROR: a bytes-like object is required, not 'str'
    quindi va in eccezione, ma il messaggio non l'ho ben capito....

  4. #4
    dopo 2000 tentativi ho fatto diversamente.
    l'istruzione per l'import di mysql lo lancio da .bat.
    da python lancio il bat senza parametri.
    così funzione, e al momento mi va bene così.

  5. #5
    Il secondo codice era quasi corretto, l'errore deriva dal fatto che hai cercato di comunicare con il processo passando una stringa (che in Python 3 è una sequenza di caratteri Unicode), mentre per comunicare su stdin/stdout si lavora con sequenze di byte. Per convertire una stringa in sequenza di byte devi usare il metodo encode() (di default usa l'encoding "di sistema", che nel tuo caso dovrebbe andare bene, in altri casi può essere necessario specificare l'encoding da usare).
    codice:
                proc.communicate(('source ' + fileSql).encode())[0]
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    grazie, appena posso provo a fare come dici te!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.