Python long listing directory (ls -l), ls * (Programare, Python, Shell)

bruce_ricard a intrebat.

Încerc să fac un ls -l din python, pentru a verifica data ultimei modificări a unui fișier.

os.listdir nu afișează formatul de listă lungă.subprocess.call afișează formatul, dar de fapt îl tipărește și returnează 0. Vreau să îl pot pune într-o variabilă. Aveți vreo idee?

De asemenea, am încercat

subprocess.call("ls","*.py")

care răspunde

ls: cannot access *.py: No such file or directory

funcționează cu shell=True, , dar dacă cineva ar putea explica de ce nu funcționează fără, aș aprecia. Dacă știți cum să o faceți să funcționeze, și mai bine.

Comentarii

  • De ce în lume ar trebui să scoți o coajă pentru a face asta, mai degrabă decât să folosești doar os.path.getmtime()? –  > Por kindall.
1 răspunsuri
Amber

Nu funcționează fără shell=True deoarece * este un caracter de expansiune de shell – trecând de la *.py la o listă de fișiere care se termină în .py este o funcție realizată de shell-ul însuși, nu de ls sau python.

Dacă doriți să obțineți ieșirea unei comenzi invocate prin intermediul lui subprocess, , trebuie să utilizați subprocess.check_output() sau subprocess.Popen.

ls_output = subprocess.check_output(['ls', '-l'])

Comentarii

  • Desigur, o modalitate și mai bună este să nu apelați ls și să utilizați în schimb os.listdir() și os.stat() (sau funcțiile de utilitate din os.path și glob modul). –  > Por Thomas Wouters.
  • Sunt de acord. Dar, din moment ce întrebarea se referea în mod special la subproces, m-am gândit că ar trebui să răspund măcar la această întrebare pentru oricine altcineva care se va întâlni cu ea. –  > Por Amber.
  • Sigur, dar recomandarea și a modului corect de a face lucrurile este mai utilă, atât pentru OP, cât și pentru oricine încearcă să facă același lucru. –  > Por Thomas Wouters.
  • Am fost în nevoia de a obține răspunsul unui apel de proces prin subprocess. Chiar și modul corect de utilizare ls cu subprocess este utilizarea os.listdir(), , Amber mi-a arătat cum pot obține rezultatul unui proces, cu excepția lui with. ls cum ar fi python myfile.py. –  > Por Onur Demir.