2014-02-28 2 views
2

일부 메시지를 stdout에 출력하는 셸 스크립트가 있는데 출력이 일부 regexp와 일치하면 다른 프로세스를 생성하려고합니다. 다른 프로세스가 일부 피드를 제공 할 때까지 셸을 잠시 멈추고 싶을 수도 있습니다. 내 요구 사항은 기본적으로 셸과 tcl에서 파이프처럼 동작하거나 파이썬에서 pexpect를하고 나의 질문은 루아가 그러한 기능을 제공 하는가?파이썬 또는 tcl에서 pexpect로 사용할 수있는 루아 기능은 무엇입니까?

나는 약간의 루아의 코 루틴을 고려해 봤지만 쉘 스크립트를 실행하는 동안 양보 할 수는 없다. 그래서 나는 파지 않았다.

답변

3

슬프게도 루아는 상자에서 파이핑 지원을 제공하지 않으므로 읽기와 쓰기 중에서 선택해야합니다. 당신이 얻을 수있는 가장 가까운는 io.popen() 에드 프로세스의 :lines()을 반복하는 것입니다 : 당신이 C 모듈에 액세스 할 수있는 경우, luaposix 마음 루아에, 그러나

posix.pipe()을 통해 곰 pipe()에 대한 인터페이스를 제공

for line in io.popen('/some/other/process'):lines() do 
    -- previous line will block until output is available 

    if line:match '^some regex' then 
     -- match found! do some stuff 
    end 

end -- EOF reached 

직업에 가장 적합한 도구가 아닐 수도 있습니다. 이럴 당신 TCL이나 파이썬, 또는 심지어 bash는 스크립트를 사용하여 더 나아질거야.

+0

위대한 답변입니다. 나는 실제로 bash 파이핑과 TCL을 사용하고 있으며 몇 가지 대안을 찾고 있습니다. 감사! –

관련 문제