2017-11-22 24 views
0

저는 라스베리 파이에 레코딩하기 위해 서브 프로세스를 통해 arecord를 사용하고 있습니다 : 레코딩을 시작하려면 조이스틱 버튼을 누르고 레코딩을 중지하려면 버튼을 다시 누르십시오. p.terminate()를 사용하여 레코딩을 중지합니다. 여기에 제 코드가 있습니다. 하위 프로세스를 종결하는 것이 올바른지 나는 모르겠다.하위 프로세스를 종료하는 올바른 방법입니까?

미리 감사드립니다. 일반적인 의미로 말하면

if joystick.get_numbuttons() >= 1 and joystick.get_button(0) == 0 and button_pressed: 
button_pressed = False 
is_recording = not is_recording 
print(is_recording) 

#start recording 
if is_recording: 
    dotting = dotting + 1 
    #recording code 
    datetime.now().strftime("%Y%m%d_%H%M%S") 
    filename = "%s.wav" % datetime.now().strftime("%Y%m%d_%H%M%S") 
    p=subprocess.Popen(['arecord', '--device=hw:1,0', '--format', 'S16_LE', '--rate', '44100-c1', filename], shell=False) 

    #change background 
    background = pygame.image.load(background_image2).convert() 
    #start timer 
    stopFlag = Event() 
    timer = MyTimer(stopFlag,time.clock()) 
    #timer.start() 
    text2 = font.render('.', True, BLACK) 

    screen.blit(background, (0,0)) 

    stopFlag.set() 

    #record, remaining here 


#stop recording 
else: 
    #stop recording, save record 
    timer.do_run = False 
    backToPreviousQuestion() 
    background = pygame.image.load(background_image).convert() 
    p.terminate() 

pygame.display.update()는

+1

'Popen.terminate()'*는 일반적으로 올바른 것입니다. 그런데 작업 코드에 대한 피드백을 요청하려면 (단일 문제를 격리하는 [mcve]에 내장 된 코드로 특정 문제에 대한 질문과 반대) StackOverflow 대신 [codereview.se]를 고려하십시오. 게시하기 전에 도움말 센터가 있음). –

+0

감사합니다, 나는 프로그래밍의 멍청한 놈입니다. 나는 코드 리뷰로 물어볼 것이다. –

답변

0

, .terminate()는 서브 프로세스를 종료하기 위해 사용하는 정확한 방법이다. 자세한 정보는 다음 문서를 참조하십시오. https://docs.python.org/3.3/library/

+0

고맙습니다, 저는 프로그래밍에 멍청한 사람입니다. 당신의 도움에 감사드립니다. –