Mam skrypt Pythona, który zawiera wiele poleceń subprocess.call
. Napisałem skrypt na Macu i działa idealnie. Po prostu próbowałem uruchomić go w systemie Windows i jestem zaskoczony przez błąd.Dlaczego to polecenie podprogramu w języku Python działa tylko wtedy, gdy shell = True w systemie Windows?
następujące polecenie, aby zadzwonić ImageMagick zwraca "status wyjścia 4":
file1 = "D:/Temp/OCR_test/sample/images/crops/time_0011.png"
subprocess.call(['convert', file1, '-resize', '200%', file1])
Zmiana komendy do następujących prac:
subprocess.call(['convert', file1, '-resize', '200%', file1], shell=True)
jestem trochę nieufny z powodu korzystania shell=True
ostrzeżenia w dokumentacji.
Potrzebuję również polecenia, aby pracować na komputerach Mac i Windows, i jestem zdezorientowany, dlaczego nie działa on w systemie Windows (sprawdziłem i polecenie działa przy użyciu Windows CMD).
ciekawe, następujący wiersz pracował wcześniej w skrypcie (gdzie file
, lat_crop1
i croplat
są zdefiniowane zmienne):
subprocess.call(['ffmpeg', '-loglevel', 'panic', '-i', file, '-vf', lat_crop1, '-n', croplat])
czytam this SO question i próbowałem wszystkie sugestie (shlex, wariacje mojego polecenia, etc ...), ale nadal otrzymuję ten sam wynik.
Ktoś ma pojęcie, jak mogę zmodyfikować tę linię, aby działała bez shell=True
?
Co oznacza także "status wyjścia 4"? Szukałem go i czytałem tyle dokumentów, ale nic nie znalazłem.
EDIT: Na podstawie informacji zawartych w odpowiedzi, zmieniłem na komendę, która nie pracowała aby subprocess.call(['mogrify', file1, '-resize', '200%', file1])
i który działa z powodzeniem w Pythonie na Windows. Na szczęście ImageMagick zapewnia mogrify
jako alternatywę dla convert
.
Co to jest polecenie 'convert'? ImageMagick? – Blorgbeard
Tak, to ImageMagick. Zapomniałem o tym wspomnieć. Działa w linii poleceń. – Bird
możesz wpisać 'where convert' z wiersza poleceń? –