2012-11-21 6 views
1

가능한 복제를하는 프로그램을 실행하는 방법 : 나는 파이썬에서 명령 줄에서 프로그램 (MP3gain.exe)를 호출하는 것을 시도하고있다
How do I execute a program from python? os.system fails due to spaces in path파이썬에서 명령 줄에서

. 내 문제는 파이썬 명령 줄에 보내는 명령 주위에 [ ''] 넣고 dos 함께 명령을 해석 할 수없는 것으로 보입니다. 여기 내 코드가있다.

import os 
import subprocess 
import Editor 

class normalize(): 
    def __init__(self, file): 
     self.FileName = file 

    def work(self): 
     command = [ 'mp3gain /r /c' + self.FileName] 
     subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 


if __name__ == "__main__": 
    test = normalize("filename.mp3") 
    test.work() 

이 경우 도움이 될 경우 exit 코드를 인쇄하면 -2가됩니다. 어떤 도움을 주셔서 감사합니다.

command = ['mp3gain', '/r', '/c', self.FileName] 
+3

당신이 무엇을 의미합니까는'파이썬은 command' 주위 [ '를'] 박았? 실제 스네이크에 코드를 입력하지 않아도됩니다. 단지 언어 이름 일뿐입니다. –

+0

커맨드 라인이'mp3gain/r/c filename.mp3'이어야한다면'command = [ 'mp3gain', '/ r', '/ c', self.FileName]'을 해 보셨습니까? (또한 mp3gain은 인터프리터의 작업 디렉토리에서 호출 가능해야합니다. 그렇지 않으면 전체 실행 파일의 경로를 호출해야 할 수도 있습니다) –

답변

3

command은 즉, 첫 번째로 mp3gain으로, 문자열 목록이어야합니다. 예를 들어 당신이 사용할 수있는 프로그램 :

os.system("mp3gain /r /c " + self.FileName) 
+0

그리고'shell'은 False 여야합니다 – jdi

0

당신은 os.system를 사용하여 프로그램을 호출 할 수 있습니다

+1

os.system은 오래된 것입니다. 프로세스를 실행하기위한 모든 이전 메소드를 대체하기 위해 서브 프로세스를 사용하는 것이 좋습니다. – jdi