Tôi có một tập lệnh python liên quan đến nhiều lệnh subprocess.call
. Tôi đã viết kịch bản trên máy Mac và nó chạy hoàn hảo. Tôi chỉ cố gắng chạy nó trên Windows và tôi bị bối rối bởi một lỗi.Tại sao lệnh Python subprocess này chỉ hoạt động khi shell = True trên Windows?
Các lệnh sau để gọi ImageMagick trả về "trạng thái thoát 4":
file1 = "D:/Temp/OCR_test/sample/images/crops/time_0011.png"
subprocess.call(['convert', file1, '-resize', '200%', file1])
Thay đổi lệnh để các công việc sau:
subprocess.call(['convert', file1, '-resize', '200%', file1], shell=True)
Tôi là một chút thận trọng của việc sử dụng shell=True
vì các cảnh báo trong tài liệu.
Tôi cũng cần lệnh để làm việc trên cả Mac và Windows, và tôi nhầm lẫn là tại sao nó không hoạt động trên Windows (tôi đã kiểm tra và lệnh này hoạt động khi sử dụng Windows CMD).
Điều thú vị là dòng sau làm việc trước đó trong kịch bản (nơi file
, lat_crop1
, và croplat
biến được định nghĩa):
subprocess.call(['ffmpeg', '-loglevel', 'panic', '-i', file, '-vf', lat_crop1, '-n', croplat])
tôi đọc this SO question và thử tất cả những gợi ý (shlex, biến thể của lệnh của tôi, vv ...), nhưng tôi vẫn nhận được kết quả tương tự.
Bất kỳ ai có bất kỳ ý tưởng nào về cách tôi có thể sửa đổi dòng đó để nó có thể hoạt động mà không cần shell=True
?
Ngoài ra, "trạng thái thoát 4" có nghĩa là gì? Tôi đã google và đọc rất nhiều tài liệu nhưng không tìm thấy gì về nó.
EDIT: Dựa trên thông tin được cung cấp trong câu trả lời, tôi đã thay đổi thành lệnh không hoạt động thành subprocess.call(['mogrify', file1, '-resize', '200%', file1])
và chạy thành công bằng Python trên Windows. May mắn là ImageMagick cung cấp mogrify
thay thế cho convert
.
Lệnh 'chuyển đổi' là gì? ImageMagick? – Blorgbeard
Vâng, đó là ImageMagick tôi quên đề cập đến điều đó. Nó hoạt động trong dòng lệnh. – Bird
bạn có thể nhập 'chuyển đổi' từ dòng lệnh không? –