cmd process -> file not found warum ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ich krieg diese Fehlermeldung: 'Error: File not found - e:/Media.json\n 1 directories scanned\n 1 image files read\n 1 files could not be read\n

Code: Alles auswählen

 com=[EXIFPFAD,"-j",str(dirfname),">","e:\Media.json"]
            process = subprocess.Popen(com, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True, universal_newlines=True)        
            stdout, stderr = process.communicate()
inhalt der "com":

0:'E:\\Python\\ExifTool\\exiftool'
1:'-j'
2:'C:\\Users\\Nutzer\\Downloads\\mc18459-720p.mp4'
3:'>'
4:'e:\\Media.json'

aber warum ?
rein als command: E:\Python\ExifTool\exiftool -j "C:\Users\Nutzer\Downloads\mc18459-720p.mp4" > "e:\Media.json" hab ich keine Probleme
der ließt auch die "dirfname" im com=...
was ist denn an der Media.json so falsch ?
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Erstens ist da ein nicht maskierter Backshlash in einer Zeichenkette.

Zweitens:
Das ">" ist das Umleiten der Standardausgabe eines Programms _in der Eingabeaufforderung_. Du bist aber nicht in der Eingabeaufforderung.
Besser: Du liest die Standardausgabe des Programms selbst und schreibst sie dann dann in die Datei.
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ernie1412: Die Kombination `Popen` + `communicate()` braucht man hier nicht, das geht mit einem `run`-Aufruf.

Die Umleitung in eine Datei ist wie sparrow schon geschrieben hat, etwas was eine Command-Shell macht. Das muss man selbst machen. Wobei das nicht wirklich schwierig ist, denn man gibt da einfach das Dateiobjekt an, in das umgeleitet werden soll.

Ungetestet:

Code: Alles auswählen

            with open("e:\\Media.json") as output_file:
                result = subprocess.run(
                    [EXIFPFAD, "-j", str(dirfname)],
                    stdout=output_file,
                    stderr=subprocess.PIPE,
                    universal_newlines=True,
                    check=True,
                )
            print(result.stderr)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten