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

    [PYTHON] Script funzionante solo nella directory locale

    Ciao a tutti,

    ho scritto un piccolo script in Python che crea un file json con la lista dei nomi dei file e prende il path alla directory da analizzare tramite riga di comando:

    codice:
    import sys
    import os
    import json
    import hashlib
    
    
    def md5(fname):
        hash_md5 = hashlib.md5()
        with open(fname, "rb") as f:
            for chunk in iter(lambda: f.read(4096), b""):
                hash_md5.update(chunk)
        return hash_md5.hexdigest()
    
    files = []
    if len(sys.argv) > 1:
        directory = sys.argv[1]
        for filename in os.listdir(directory):
            if os.path.isfile(filename):
                file_stats = os.stat(filename)
                item = {
                    "FileName": filename
                }
                files.append(item)
    
        directoryDetails = {
            "files": files
        };
        f = open("root.json", "w")
        f.write(json.dumps(directoryDetails, indent=4))
        f.close()
        sys.exit(0);
    else:
        print("No input directory: please specify input directory")
        sys.exit(-1)
    Se lancio lo script così "python myPythonScript.py ." il file viene scritto e riporta le informazioni che mi servono.
    Se invece provo ad indicare un path assoluto (es. /var/log/) il file viene creato ma è vuoto:
    codice:
    {
        "files": []
    }
    Qualcuno mi sa dire perché? Non credo sia un problema di permessi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Fai il print di:
    print(sys.argv[1])

    Perchè penso che quella li più che directory sia il nome del file. Credo debba essere sys.argv[2].
    Logiqo.org gestionale per perizie infortunistiche.

  3. #3
    Ciao,

    ci ho provato ed effettivamente stampa la directory che mi interssa:
    codice:
    $ python3 updater.py /var/log/
    /var/log/
    Il file rimane comunque "vuoto":
    codice:
    ~$ cat root.json
    {
        "files": []
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    ok allora la butto li... possono essere i permessi?

    prova a fare un sudo e poi esegui lo script
    Logiqo.org gestionale per perizie infortunistiche.

  5. #5
    Grazie per la risposta. Ho omesso di dirlo ma tutti i test li sto facendo da root per il momento, quindi lo escluderei.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ok ho provato il codice... il problema è che:

    if os.path.isfile(filename) deve ricevere il percorso assoluto
    quindi os.path.join(directory, filename)
    Logiqo.org gestionale per perizie infortunistiche.

  7. #7
    Scusami non ho capito.
    Sto facendo alcune prove: dovrei sostituire il check dentro l'IF con quel os.path.join(directory, filename)?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    dopo il ciclo:
    codice:
        for filename in os.listdir(directory):
            filename = os.path.join(directory, filename)
    Logiqo.org gestionale per perizie infortunistiche.

  9. #9
    Grazie! Risolto ha funzionato!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.