2015-01-31 5 views
0

응용 프로그램 내에서 exec을 사용하여 Ruby에서 sox를 ​​호출하면 명령 파일에서 선택한 파일 재생이 완료 될 때까지 응용 프로그램으로 돌아 가지 않습니다.응용 프로그램 (sox) 제어

IO.popen을 사용하면 시작한 후에 프로세스가 느슨합니다.

나는 pipe으로 프로세스를 실행하려고 시도했지만 파일에 결과는 다음 명령을 사용하여 루비로 제어를 반환 :

play '01\ -\ Planet\ Telex.mp3' > results.txt 2>&1 & 

삭스는이 명령에 "나는 지금 백그라운드 프로세스 해요"를 사용을 일시 정지하면 명령 위의 명령이 실행되는 즉시 재생이 중지됩니다.

어쩌면 해결책은 Ruby에서 다른 쉘을 생성하고 그 안에 프로세스를 작동시키는 것일 수 있습니다. 누구든지 더 좋은 아이디어가 있습니까?

답변

0

IO.popen은 하위 프로세스를 생성하고 입출력에 대한 액세스 권한을 부여하기 때문에 정확히 원하는대로 수행해야하기 때문에 "프로세스 제어 느슨해 짐"이 무슨 뜻인지 확신 할 수 없습니다. 별도의 출력/오류 스트림을 원하는 경우에

IO.popen(["sed", "-e", "s/^/foo/"], "r+") do |f| 
    f.puts "bar" 
    f.close_write 
    puts f.gets 
end 
# foobar 

, 당신은 popen3를 사용할 수 있습니다 여기에

sed에 입력을 전송하고 결과를 읽어 그것을 사용의 예입니다.

+0

고마워요! :) – user284377

+0

좋아, 그거 좋겠지 만,이 do 루프 안에있는 동안 나는 다른 작업을 계속할 수있다. 나는 이것이 소프트웨어 설계 아키텍처에 대한 질문이되었다고 생각한다. – user284377

+0

그게 바로 [스레드] (http://ruby-doc.org/core-2.2.0/Thread.html)입니다. – Max