Ich versuche, ein Programm auszuführen, um einige Systemaufrufe in Python-Code auszuführen, mit subprocess.call()
dem der folgende Fehler ausgegeben wird:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Mein tatsächlicher Python-Code lautet wie folgt:
url = "/media/videos/3cf02324-43e5-4996-bbdf-6377df448ae4.mp4"
real_path = "/home/chanceapp/webapps/chanceapp/chanceapp"+url
fake_crop_path = "/home/chanceapp/webapps/chanceapp/chanceapp/fake1"+url
fake_rotate_path = "/home/chanceapp/webapps/chanceapp.chanceapp/fake2"+url
crop = "ffmpeg -i %s -vf "%(real_path)+"crop=400:400:0:0 "+ "-strict -2 %s"%(fake_crop_path)
rotate = "ffmpeg -i %s -vf "%(fake_crop_path)+"transpose=1 "+"%s"%(fake_rotate_path)
move_rotated = "mv"+" %s"%(fake_rotate_path)+" %s"%(real_path)
delete_cropped = "rm "+"%s"%(fake_crop_path)
#system calls:
subprocess.call(crop)
Kann ich relevante Ratschläge zur Lösung dieses Problems erhalten?
python
django
subprocess
Sandeep Mederametla
quelle
quelle
Antworten:
Verwenden
shell=True
Sie diese Option, wenn Sie eine Zeichenfolge an übergebensubprocess.call
.Aus Dokumenten :
oder:
quelle
shell=True
besteht, dringend empfohlen wird", siehe Link in der Antwort.shell=True
ist nicht erforderlich. Darüber hinaus sollten Sie es nicht verwenden, es sei denn, es ist erforderlich (siehe Kommentar von @ valid). Sie sollten jedes Befehlszeilenargument stattdessen als separates Listenelement übergeben, z. B.['command', 'arg 1', 'arg 2']
anstelle von"command 'arg 1' 'arg 2'"
.shell=True
. Die Sicherheitsaspekte gehen über den Rahmen dieser Frage hinaus.Kann nicht upvoten, also werde ich @ jfs Kommentar erneut posten, weil ich denke, dass es sichtbarer sein sollte.
quelle
No such file or directory
kann auch ausgelöst werden, wenn Sie versuchen, ein Dateiargument inPopen
doppelte Anführungszeichen zu setzen.Beispielsweise:
In diesem Fall müssen Sie doppelte Anführungszeichen entfernen.
quelle