[SCALA] 어떻게 스칼라 2.9 일에서 "scala.sys.process"는 무엇입니까?
SCALA어떻게 스칼라 2.9 일에서 "scala.sys.process"는 무엇입니까?
난 그냥 여기에 도움이되는 뭔가가 있는지 확인하기 위해 새로운 scala.sys 및 scala.sys.process 패키지를 살펴했다. 그러나, 나는 완전히 손실입니다.
사람이 실제로 프로세스를 시작하는 방법에 대한 예제를 가지고있다?
그리고, 나에게 가장 흥미로운이다 : 당신은 프로세스를 분리 할 수 있습니까?
분리 된 프로세스는 부모 프로세스 종료하고 개미의 약점 중 하나입니다 때 계속 실행됩니다.
최신 정보:
분리가 무엇인지 혼란이있을 것 같다. 나의 현재 프로젝트에서 실제 살아있는 예제를 가지고있다. Z-셸 및 TakeCommand에 한 번 한 번 :
Z-쉘 :
if ! ztcp localhost 5554; then
echo "[ZSH] Start emulator"
emulator \
-avd Nexus-One \
-no-boot-anim \
1>~/Library/Logs/${PROJECT_NAME}-${0:t:r}.out \
2>~/Library/Logs/${PROJECT_NAME}-${0:t:r}.err &
disown
else
ztcp -c "${REPLY}"
fi;
테이크 명령 :
IFF %@Connect[localhost 5554] lt 0 THEN
ECHO [TCC] Start emulator
DETACH emulator -avd Nexus-One -no-boot-anim
ENDIFF
두 경우는 에뮬레이터가 시작되고 스크립트가 종료 된 후에도 계속 실행됩니다, 화재이며, 잊어 버려. 물론 두 번 스크립트를 작성해야하는 낭비이다. 나는 Cygwin에서 또는 XML 구문없이 처리하는 통합 프로세스 지금 스칼라 들여다 그래서.
해결법
-
==============================
1.먼저 수입 :
먼저 수입 :
import scala.sys.process.Process
다음 ProcessBuilder를을 만들
val pb = Process("""ipconfig.exe""")
그런 다음 두 가지 옵션이 있습니다 :
당신은 당신이 ProcessIO를 사용할 수있는 프로세스의 입력과 출력을 처리하는 경우 :
import scala.sys.process.ProcessIO val pio = new ProcessIO(_ => (), stdout => scala.io.Source.fromInputStream(stdout) .getLines.foreach(println), _ => ()) pb.run(pio)
-
==============================
2.나는 확신 프로세스가 명시 적으로 종료에 기다릴 필요가 있음을 고려하고, 잘 작동 분리하고있어, 당신은 표준 출력과 표준 에러를 보모 스레드를 사용합니다. 이것은 아주 기본적인이지만, 내가 사용하고있는 작업은 다음과 같습니다
나는 확신 프로세스가 명시 적으로 종료에 기다릴 필요가 있음을 고려하고, 잘 작동 분리하고있어, 당신은 표준 출력과 표준 에러를 보모 스레드를 사용합니다. 이것은 아주 기본적인이지만, 내가 사용하고있는 작업은 다음과 같습니다
/** Run a command, collecting the stdout, stderr and exit status */ def run(in: String): (List[String], List[String], Int) = { val qb = Process(in) var out = List[String]() var err = List[String]() val exit = qb ! ProcessLogger((s) => out ::= s, (s) => err ::= s) (out.reverse, err.reverse, exit) }
-
==============================
3.프로세스는 SBT에서 수입했다. 여기가 SBT에 나타나는 프로세스 라이브러리를 사용하는 방법에 대한 철저한 가이드입니다.
프로세스는 SBT에서 수입했다. 여기가 SBT에 나타나는 프로세스 라이브러리를 사용하는 방법에 대한 철저한 가이드입니다.
https://github.com/harrah/xsbt/wiki/Process
-
==============================
4.
import sys.process._ // Package object with implicits! "ls"!
"/path/to/script.sh".run()
당신이 무엇을 할 거 야의 대부분은 sys.process.ProcessBuilder의 특성과 관련이 있습니다. 그것을 알아.
이 덜 장황 사용을 implicits이 있고, 그들은 패키지 개체 sys.process 통해 사용할 수 있습니다. 예제에 표시된 것처럼, 그 내용을 가져옵니다. 또한,뿐만 아니라 그 scaladoc를보십시오.
-
==============================
5.문서 여기하는 경우 다음과 같은 기능을 쉽게 사용할 수 있습니다 :
문서 여기하는 경우 다음과 같은 기능을 쉽게 사용할 수 있습니다 :
def #<<< (command: String) (hereDoc: String) = { val process = Process (command) val io = new ProcessIO ( in => {in.write (hereDoc getBytes "UTF-8"); in.close}, out => {scala.io.Source.fromInputStream(out).getLines.foreach(println)}, err => {scala.io.Source.fromInputStream(err).getLines.foreach(println)}) process run io }
슬프게도 나는 중위 작동하게 (에 시간이 없었다) 할 수 없습니다. 제안 호출 규칙은 그러므로 :
#<<< ("command") {""" Here Document data """}
누군가가 나에게 그것을 호출 같은 더 쉘 만드는 방법에 대한 힌트를 줄 수 있다면 전화를 할 것입니다 :
"command" #<<< """ Here Document data """ !
-
==============================
6.과정을 문서화 조금 더 나은 아마 이개월 내 목록에 두 번째였다. 당신은 내가 그것을 가진 적이 없어 사실에서 내 목록을 추론 할 수있다. 나는 대단히가 도착했을 때 그것이로 문서화로 남아 후회 그래서 내가하지 않는 대부분의 것들과는 달리,이, 나는 내가 할 것이라고 말했다 무언가이다. 검, 자신을 준비! 나는 네게 가을!
과정을 문서화 조금 더 나은 아마 이개월 내 목록에 두 번째였다. 당신은 내가 그것을 가진 적이 없어 사실에서 내 목록을 추론 할 수있다. 나는 대단히가 도착했을 때 그것이로 문서화로 남아 후회 그래서 내가하지 않는 대부분의 것들과는 달리,이, 나는 내가 할 것이라고 말했다 무언가이다. 검, 자신을 준비! 나는 네게 가을!
-
==============================
7.지금까지 대화를 이해한다면, 원래의 질문의 한 측면은 아직 응답되지 않습니다
지금까지 대화를 이해한다면, 원래의 질문의 한 측면은 아직 응답되지 않습니다
주요 어려움은 JVM에서 실행해야합니다 프로세스를 생성에 관여하는 모든 클래스, 그리고 그들이이 불가피 할 때 JVM 종료를 종료하는 것입니다. 그러나, 해결 방법은 간접적으로 대신 "분리"를 할 수있는 쉘을 활용하여 목표를 달성하는 것입니다. 원하는대로 gvim을 편집기, 작업에 나타납니다 출시 다음 스칼라 스크립트 :
val cmd = List( "scala", "-e", """import scala.sys.process._ ; "gvim".run ; System.exit(0);""" ) val proc = cmd.run
그것은 그 스칼라가 PATH에있는 가정, 그리고 (불가피하게)뿐만 아니라 실행하는 JVM의 부모 프로세스를 떠나지 않습니다.
from https://stackoverflow.com/questions/6013415/how-does-the-scala-sys-process-from-scala-2-9-work by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스파크 2.0에서 단위 테스트를 작성하는? (0) | 2019.11.10 |
---|---|
[SCALA] 어떻게 경우 클래스의 인스턴스를 복제하고 스칼라에 하나의 필드를 변경하려면? (0) | 2019.11.10 |
[SCALA] => 수행하고 무엇 () => 스칼라의 평균 [중복] (0) | 2019.11.10 |
[SCALA] 간단한 경우 클래스에 대한 주문을 정의하기 쉬운 관용적 방법 (0) | 2019.11.10 |
[SCALA] 방법에 대한-함축 스칼라와 루프 최적화? (0) | 2019.11.10 |