604
4
부
고급 주제 및 실전 응용
17.1
scala
.
sys
.
process
패키지
경우에 따라 데이터베이스 트랜젝션, 메시지 큐, 또는 프로세스 사이의 파이프 등을 사용해서
서로 상태를 조정하는 여러 작은 동기적 프로세스를 사용할 수 있다.
scala
.
sys
.
process
(
http
://
bit
.
ly
/
1xIm0hO
) 패키지는
I
/
O
를 포함해서 운영 체계 프로세스
를 실행하고 관리하기 위한
DSL
을 제공한다. 다음은 그 기능 중 일부를 보여주는
REPL
세션이
다. 명령을 위해
bash
와 같은 유닉스 셸을 사용했다.
//
src
/
main
/
scala
/
progscala2
/
concurrency
/
process
/
processes
.
sc
scala
>
import scala
.
sys
.
process
.
_
scala
>
import scala
.
language
.
postfixOps
scala
>
import java
.
net
.
URL
scala
>
import java
.
io
.
File
//
명령을
실행하고
출력을
stdout
에
보낸다
.
scala
>
"
ls
-
l src
".!
total 0
drwxr
-
xr
-
x 4 deanwampler staff 136 Dec 19 2013 main
drwxr
-
xr
-
x 4 deanwampler staff 136 Dec 19 2013 test
res33
:
Int
=
0
//
명령
토큰을
Seq
로
넘기고,
출력
결과를
단일
문자열에
넣어서
돌려받는다
.
scala
>
Seq
("
ls
",
"
-
l
",
"
src
").!!
res34
:
String
=
"
total 0
drwxr
-
xr
-
x 4 deanwampler staff 136 Dec 19 2013 main
drwxr
-
xr
-
x 4 deanwampler staff 136 Dec 19 2013 test
"
여러 프로세스를 연결할 수도 있다. 다음 메서드를 보자.
//
URL
을
열기
위한
프로세스를
만들고,
그
출력을
‘
grep
$
filter
’
에
보낸다
.
//
그리고
출력
결과를
파일에
덧붙인다
(
파일을
덮어쓰지
않는다
)
.
def findURL
(
url
:
String
,
filter
:
String
)
=
new URL
(
url
)
#
>
s
"
grep
$
filter
"
#
>>
new File
(
s
"$
filter
.
txt
")
//
파일에
대해
ls
-
l
을
실행한다.
해당
파일이
존재하면
줄
수를
센다
.
def countLines
(
fileName
:
String
)
=
s
"
ls
-
l
$
fileName
"
#&&
s
"
wc
-
l
$
fileName
"
Get 프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.