Seite 1 von 1

cmd process -> file not found warum ?

Verfasst: Samstag 4. Juni 2022, 22:21
von Ernie1412
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 ?

Re: cmd process -> file not found warum ?

Verfasst: Samstag 4. Juni 2022, 22:27
von sparrow
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.

Re: cmd process -> file not found warum ?

Verfasst: Samstag 4. Juni 2022, 23:43
von __blackjack__
@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)