2012-05-14 3 views
3

파이썬에서 일련의 복잡한 Imagemagick 명령을 사용하는 스크립트를 작성하고 있습니다. 나는 이런 식으로 뭔가 호출하는 방법을 궁금하네요 ...파이썬 하위 프로세스에 복잡한 쉘 명령 보내기

convert 1.png \(+clone -background black -shadow 110x1+9+9 \) +swap -background none -layers merge +repage 2.png

나는 서브 프로세스로 간단한 명령을 호출 완벽하게 편안하게,하지만 난 아직 실행 순서 (이스케이프 괄호를 지정하는 방법을 모른다).

확실히 os.system 또는 명령 모듈을 사용할 수 있지만 언어를 떠나기 때문에 서브 프로세스를 사용하는 것이 좋습니다.

답변

2

예, subprocess을 사용하고 싶습니다. 당신은 단순히 Popen로 줄 인수 목록에서 별도의 항목에서 각 인수를 둘 필요가 : 또한 인수의 주문을 변경해야하는 경우, 사전에 그 인수 목록을 구축 할 수 있습니다

subprocess.Popen(['convert', '1.png', '(', '+clone', '-background', 'black', '-shadow', '110x1+9+9', 
        ')', '+swap', '-background', 'none', '-layers', 'merge', '+repage', '2.png'], 
       otherargments=values, etc=etc) 

.

인수 (인수 안에 공백 또는 "("및 ")"와 같은 다른 특수 쉘 문자)와 같은 인수를 이스케이프 할 필요가 없습니다.이 인수는 a로 해석되지 않으므로 껍질.

+0

작동합니다! 나는 subprocess.call()도 사용할 수 있다고 생각한다. 괄호가 imagemagick에 의해서만 해석 될 것이라는 것을 나는 깨닫지 못했다. – pepperdreamteam

+0

하위 프로세스가 실행되는 동안 아무 것도하지 않아도된다면 subprocess.call()이 좋습니다. 다행히 도울 수있어. –

관련 문제