node.js 유용한 모듈 (15) – procstreams

원문 링크 -http://www.catonmat.net/blog/nodejs-modules-procstreams/
본 게시글은 원저자의 허락을 얻어 번역한 것입니다.

1회 연재 – dnode (RPC 라이브러리)
2회 연재 – optimist (옵션 파서)
3회 연재 – lazy (lazy 리스트 처리)
4회 연재 – request (HTTP 스트림 처리)
5회 연재 – hashish (해시 처리)
6회 연재 – read (쉬운 표준 입력 처리)
7회 연재 – ntwitter (트위터 API)
8회 연재 – socket.io (웹소켓 통신)
9회 연재 – redis (redis 클라이언트 라이브러리)
10회 연재 – express (경량의 고속 웹 프레임워크)
11회 연재 – semvar (버전 넘버링 처리)
12회 연재 – cradle (고수준 CouchDB 클라이언트)
13회 연재 – JSONStream (스트리밍 JSON 파서)
14회 연재 – everyauth (페이스북, 트위터 등의 서비스 인증)

오늘 소개할 모듈은 polotek이라는 닉네임으로 알려진 Marco Rogers가 만든 procstreams 모듈이다. procstreams는 node에서 쉘 스크립팅을 실행하는 아직 실험 단계의 모듈이다.

var $p = require('procstreams');

$p('cat lines.txt').pipe('wc -l')
  .data(function(stdout, stderr) {
      console.log(stdout); // prints number of lines in the file lines.txt
  });

위 예제는 cat lines.txt 쉘 명령어를 실행한 다음, 결과값을 wc -l 명령의 입력으로 전달(pipe) 한다. 그런 다음 콜백 함수를 통해  lines.txt 파일의 라인 수를 출력하게 된다.

다음은 또 다른 예제이다.

var $p = require('procstreams');

$p('mkdir foo')
  .and('cp file.txt foo/')
  .and('rm file.txt')
    .on('exit', function() {
      console.log('done');
    });

위 예제는 mkdir foo 을 실행하고, 이 명령이 성공하면 cp file.txt foo/ 명령을 실행한다. 이 명령이 계속 성공했다면, rm file.txt 명령을 계속 수행한다. 위 코드를 쉘 스크립트로 작성하면 다음과 같을 것이다.

mkdir foo && cp file.txt foo/ && rm file.txt

.and(…) 함수는 쉘 스크립트에서 && 와 같다.

procstreams는 또한 쉘 스크립트 명령에서 ||와 유사한 .or(...) 메서드와 ;와 유사한 .then(...)메서드를 지원한다.

다음은 예제 코드이다.

var $p = require('procstreams');

$p('mkdir foo')
  .then('cp file.txt file2.txt')
  .or('echo "failed" > ~/notify')

이 예제는 mkdirs foo 명령을 수행한 다음, file.txt를 file2.txt로 복사한다. 만약 복사가 실패할 경우 “failed” 에러를 ~/notify 파일에 쓴다. 쉘 스크립트로 작성하면 다음과 같을 것이다.

mkdir foo; cp file.txt file2.txt || echo "failed" > ~/notify

procstreams의 전체 기능을 알고 싶다면 Github 사이트상의 procstreams documentation을 살펴봐라.

다음과 같이 npm을 통해 procstreams 를 설치할 수 있다.

npm install procstreams

Procstreams의 GitHub 사이트 : https://github.com/polotek/procstreams.

iamhjoo(송형주) 에 관하여

인사이드 안드로이드 저자 / 최근엔 Node & JavaScript에 꽂혀서 허우적 거리고 있습니다.
이 글은 카테고리: node.js에 포함되어 있으며 태그: , , (이)가 사용되었습니다. 고유주소를 북마크하세요.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>