2012-09-26 3 views
1

저는 GNU/리눅스와 파이썬 2.7.3을 사용하고 있습니다. 나는 ffmpeg처럼 Popen() 명령을 사용하여 오랫동안 설치된 시스템 프로세스를 실행하여 메인 파이썬 프로세스를 막지 않도록하고있다. 나는 그것을 작동하게 만들 수 없다.파이썬 : 메인 프로세스를 차단하지 않고 긴 스크립트를 실행하십시오.

내 첫 번째 시도는 스레드를 사용했지만, 그래픽 인터페이스가 제대로 작동하지 않기 때문에 그것은 조금 복잡하다 (그리고 나는 더 나은 방법이 있어야한다 가정)

가 그럼 난 포크를했지만, 그것은 탱크로 파리를 죽이는 것과 같습니다.

이제는 Popen을 사용하려고하는데, 인터넷에서 그 사용에 대한 많은 언급을 보았습니다. 그러나 제대로 실행하지 못했습니다. 어쩌면 예제를 오해하고 있습니다.

이 나는 ​​시도했다 :

##command is ffmpeg like that works ok 
p = subprocess.Popen(command, shell=True)  

나는 또한 시도했다 :

p = subprocess.Popen(command,stdin=PIPE, shell=True) 

보통 나는 오류 또는 sequentcial 행동 명령 끝을 얻을 후 메인 프로그램이 다시 시작됩니다. 내가 뭘 놓치고 있니?

명령 부분 :

global vidSource 
    global srtSource 
    global done 
    size = "3" 

    font = "/usr/share/fonts/truetype/freefont/FreeSerif.ttf" 
    command = 'mencoder ' + '"' + vidSource + '"' + " -oac copy -ovc lavc -lavdopts threads=2 -sub " + "'" + srtSource + "'" + " -subcp -utf8 -font "+ '"'+ font+ '"' + " -subfont-text-scale " + size + " -o " + '"' + vidSource + '2'+'"' 
+0

어떤 오류가 발생합니까? –

+0

어떤 오류가 있습니까? 'Popen'은 새로운 프로세스를 생성하기 위해'fork()'(리눅스에서)를 사용합니다 ... 어떤 이유로 포크를하고 싶지 않다면 Popen은 실행 가능한 솔루션이 아닙니다. – tMC

+0

죄송합니다, 지정하는 것을 잊지 마십시오. 나는 오류를 재현하려고 시도했지만, 나는 sequencial 동작을 게시 두 comands 함께 얻을. 역 추적 (마지막으로 가장 최근 통화) : 파일 "/home/fer/myapp/myapp/MyappWindow.py", 라인 129, on_addSubtitle_clicked P = subprocess.Popen (명령) 에서 :( – ferbuntu

답변

2

당신은 좋은 트랙에 있어야합니다. 그냥 당신은 shell=True를 사용하여하다는 documentation

주에 설명 된 프로세스가하는 p.poll로 종료 여부를 확인할 수

p = subprocess.Popen(command) 

를 사용 하지 그렇지 시도해야하므로 (보안상의 이유로 권장) 당신이 아주 좋은 이유가 없다면 그것을 사용하십시오.

설명서에 설명 된대로 command 인수 여야합니다. 긴 문자열을 작성하는 경우 을 유지하면서 문자열로 변환하려면 shlex.split(command)을 사용해야합니다 (물론 모듈에는 import shlex이 필요합니다).

+0

는 오류가 발생합니다 파일 "/usr/lib/python2.7/subprocess.py", 줄 679, __init__에서 errread, errwrite) 파일 "/usr/lib/python2.7/subprocess.py", 줄 1249, _execute_child에서 제기 child_exception OSError : [Errno 2] 해당 파일이나 디렉토리가 없습니다. 이것은 오류가 발생하는 유일한 방법이므로 명령이 oK라고 생각합니다. 도와 주셔서 감사합니다! – ferbuntu

+0

@ferbuntu - 당신은'명령 '으로 무엇을 전달합니까? – mgilson

+0

'해당 파일이나 디렉토리가 없습니다 .' ..당신이 존재하지 않는 것을 액세스/실행하려고한다는 것을 의미합니다. – tMC

관련 문제