2016-07-06 1 views
3

mediainfo를 사용하여 비디오 파일의 길이를 읽으려고합니다. 이 쉘 명령은 python : 어떻게 subprocess.check_output이 호출을 생성합니까?

mediainfo --Inform="Video;%Duration/String3%" file 

을 작동하고

00:00:33.600 

같은 출력을 생성하지만이 줄 파이썬에서 그것을 실행하려고하면

subprocess.check_output(['mediainfo', '--Inform="Video;%Duration/String3%"', file]) 

전체 --inform 것은 무시됩니다 대신 전체 mediainfo 출력을 얻습니다.

잘못된 것을보기 위해 서브 프로세스에 의해 생성 된 명령을 볼 수있는 방법이 있습니까?

아니면 아무나 잘못 알려줄 수 있습니까?

+0

하나의 인수로 모두 넣으려고 했습니까? subprocess.check_output ([ 'mediainfo --Inform = "Video; % Duration/String3 %"', file]) – telina

+0

서브 프로세스가 (정확하게) 프로그램을 찾을 수 없기 때문에 그랬지만 작동하지 않습니다. "mediainfo --Inform = ... ". – user1785730

+2

큰 따옴표가 필요하다고 생각하지 않습니다.'Inform = Video; % Duration/String3 %'시도해보십시오. – wim

답변

2

시도해보십시오을 구문 분석 할 수있는 옵션을 무시합니다

subprocess.check_output(['mediainfo', '--Inform=Video;%Duration/String3%', file]) 

가능성이 mediainfo에 전달되는 파이썬 문자열의 ".

이러한 종류의 문제는 종종 다양한 특수 문자가 필요/삼키는 셸 명령으로 인해 발생합니다. "과 같은 인용문은 쉘 마법 때문에 종종 bash에 의해 제거됩니다. 반대로, 파이썬은 마술을 필요로하지 않으므로 그들을 사용했던 방식대로 복제합니다. 당신이 그들을 필요로하지 않는다면 왜 그들을 사용하겠습니까? (글쎄, bash는 당신이 그들을 필요로한다고 믿기 때문에).

예를 들어, bash는 내가

$ dd of="foobar" 

을 할 수 있으며 따옴표를 삼키는, foobar라는 이름의 파일에 기록됩니다. 내가

subprocess.check_output(["dd", 'of="barfoo"', 'if=foobar']) 

그것이 "barfoo"라는 이름의 파일에 기록됩니다한다면 파이썬에서

, 따옴표를 유지.

관련 문제