일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- happycgi
- #업종별
- 사이트제작
- javascript
- #jQuery
- #해피CGI
- #홈페이지
- 웹솔루션
- #happycgi
- 게시판
- 홈페이지제작
- #웹솔루션
- CGIMALL
- 솔루션
- #CSS
- #이미지
- 해피CGI
- #홈페이지제작
- #쇼핑몰
- jquery
- CSS
- 해피씨지아이
- 쇼핑몰
- #cgimall
- #image
- #동영상
- #뉴스
- 홈페이지
- #솔루션
- php
- Today
- Total
웹솔루션개발 22년 노하우! 해피CGI의 모든것
[해피CGI][cgimall] 다른 프로그램을 실행시켜 출력내용 읽기 본문
다른 프로그램을 실행시키고 그 출력 내용을 읽는 방법은 여러가지가 있습니다. 많은 분들이 알고 계시지만, 몇몇 모르시는 분들을 위해 여기 그 방법들을 소개합니다. Backtick 역따옴표(`...`)는 그 안에 들어있는 내용을 shell을 통해 실행하고, 표준출력(STDOUT)으로 출력되는 내용을 반환합니다. 따라서, $content = `cat /etc/passwd`; 는 passwd 파일을 간단히 읽어들입니다. 물론, 단순한 파일을 읽는데는 직접 open을 해서 읽어들이는 것이 좋습니다. 역따옴표를 사용하게 되면, 그 내부의 프로그램을 실행하기 위해서 별도의 프로세스가 생성되어야 하기 때문에 그만큼 시스템의 자원을 소모하게됩니다. open 함수를 이용하는 방법 open 함수에서 파일이름분에 > 대신 | (파이프)기호를 뒤에 붙이면 해당 파일이름을 실행시키고 그 출력내용을 읽을 수 있습니다.
[프로그램코드]
opener.pl에서 prog.pl을 "./prog.pl |"와 같이 하여 열었습니다.(open) 그 후 일반 파일 읽기에서 하는 것처럼 <RUN>를 이용하여 출력내용을 읽습니다. 참고로, open 함수가 반환하는 것은, 프로그램이 제대로 실행되었을 때, 새로운 프로세스의 프로세스 아이디입니다. 만일 이 프로그램이 오랜시간동안 살아 있는 것(웹서버처럼)이라면 close를 하지 않을 경우 문제가 될 수 있습니다. 예를 들어, open은 계속해야 하는데, close를 해 주지 않는다면, 해당 프로세스가 죽지않고 계속 남아서 시스템자원을 차지하고 있어서 결국 시스템이 멈추는 상황이 발생할 수도 있게됩니다. 따라서 반드시 close를 해 주어야 합니다. 만일 표준에러(STDERR)까지 같이 읽어야 한다면
[프로그램코드]
와 같이 2>&1를 추가합니다. 이 글은 http://www.perl.or.kr/tips/readoutput.html 에서 발췌된 글입니다.
[프로그램코드]
#!/usr/bin/perl # prog.pl print "$$\n"; warn "Exiting\n"; #!/usr/bin/perl # opener.pl $p = open(RUN, "./prog.pl |") || die $!; # ./prog.pl 뒤에 | 표시. @out = <RUN>; close RUN; # 반드시 하십시오. print "opener: $p\n"; print map { "opener: $_" } @out; |
opener.pl에서 prog.pl을 "./prog.pl |"와 같이 하여 열었습니다.(open) 그 후 일반 파일 읽기에서 하는 것처럼 <RUN>를 이용하여 출력내용을 읽습니다. 참고로, open 함수가 반환하는 것은, 프로그램이 제대로 실행되었을 때, 새로운 프로세스의 프로세스 아이디입니다. 만일 이 프로그램이 오랜시간동안 살아 있는 것(웹서버처럼)이라면 close를 하지 않을 경우 문제가 될 수 있습니다. 예를 들어, open은 계속해야 하는데, close를 해 주지 않는다면, 해당 프로세스가 죽지않고 계속 남아서 시스템자원을 차지하고 있어서 결국 시스템이 멈추는 상황이 발생할 수도 있게됩니다. 따라서 반드시 close를 해 주어야 합니다. 만일 표준에러(STDERR)까지 같이 읽어야 한다면
[프로그램코드]
#!/usr/bin/perl # prog.pl print "$$\n"; warn "Exiting\n"; #!/usr/bin/perl # opener.pl $p = open(RUN, "./prog.pl 2>&1 |") || die $!; # ./prog.pl 뒤에 | 표시. @out = <RUN>; close RUN; # 반드시 하십시오. print "opener: $p\n"; print map { "opener: $_" } @out; |
와 같이 2>&1를 추가합니다. 이 글은 http://www.perl.or.kr/tips/readoutput.html 에서 발췌된 글입니다.
'웹프로그램밍 자료실 > 알짜자료 골드팁' 카테고리의 다른 글
[해피CGI][cgimall] 펄 스크립트의 문법검사 (0) | 2017.03.09 |
---|---|
[해피CGI][cgimall] 펄모듈 동적으로 로드하기 (use와 require의 차이점) (0) | 2017.03.07 |
[해피CGI][cgimall] 날짜 패턴 검사와 후참조(backreference) (0) | 2017.02.28 |
[해피CGI][cgimall] 주민등록번호 자바스크립트로 체크하기 (0) | 2017.02.27 |
[해피CGI][cgimall] mysql 쿼리로 이번달과 이번해 숫자로 뽑아내기 (0) | 2017.02.23 |
Comments