Raku의 bind-stdin — 프로세스의 표준 입력을 핸들에 연결

Raku의 bind-stdin — 프로세스의 표준 입력을 핸들에 연결

외부 프로세스를 띄울 때, 그 프로세스의 표준 입력(STDIN)을 파일 핸들이나 파이프에서 받아오게 하고 싶을 때가 있어요. Proc::Asyncbind-stdin 메서드가 그 역할을 해요. 핸들(열려 있어야 함) 또는 Pipe를 STDIN의 원천으로 설정해요.

multi method bind-stdin(IO::Handle:D $handle)
multi method bind-stdin(Proc::Async::Pipe:D $pipe)

대상 프로세스의 STDIN은 쓰기 가능해야 해요. 그렇지 않으면 X::Proc::Async::BindOrUse가 발생해요.

예시로 cat 프로세스를 띄우고 그 STDIN에 파일 핸들을 연결해 볼게요.

my $p = Proc::Async.new("cat", :in);
my $h = "/etc/profile".IO.open;
$p.bind-stdin($h);
$p.start;

이것은 아래 셸 명령과 같은 일을 해요.

cat < /etc/profile

그리고 /etc/profile의 내용을 표준 출력으로 찍어요.

출처: Raku 공식 문서 — bind-stdin

본문

  • bind-stdin은 열린 핸들이나 Pipe를 대상 프로세스의 STDIN 원천으로 설정해요.
  • STDIN이 쓰기 가능하지 않으면 X::Proc::Async::BindOrUse 예외가 나요.
  • cat < 파일과 같은 셸 리다이렉션을 프로그램적으로 구현하는 셈이에요.