2013-02-05 1 views
0

저는 광산 프로젝트의 하위 프로세스 관리를 단순화하기 위해 Clojure 라이브러리를 사용하고 있습니다. 본질적으로 Java의 ProcessBuilder을 Clojuric 방식으로 래핑합니다. 한 가지해야 할 것은 누락 된 명령을 잡는 것입니다. 즉, 사용자가 this-command-not-found을 셸 명령으로 사용하려면 내 코드가 예외를 throw해야합니다.ProcessBuilder에 대한 인수가 유효한 명령인지 확인하십시오.

ProcessBuilder과 같이하는 것이 어렵거나 불가능한 것처럼 보입니다. 어떻게 든 사용자의 $PATH을 가져 와서 유효한 명령을 확인하기 위해 검색해야합니까, 아니면 더 좋은 방법이 있습니까?

편집 : 처리를 시작하지 않고 처리를 시작하십시오. 내 의견을 참조하십시오.

+0

전반적으로 가능하지 않은 경우 내 대답이 훨씬 구체적이지 않습니까? –

답변

1

물론, $PATH을 검색하는 것보다 나은 방법이 있습니다. 사용자가 실행하라는 명령을 실행하기 만하면됩니다. 사용자가 사용할 수있는 셸 세트가 자유롭기 때문에 ProcessBuilder 또는 다른 메커니즘을 사용하면 똑똑한 솔루션이 가능하지 않으며 셸이 검색 할 수있는 $PATH의 개념조차 가질 필요가 없습니다. 할 수있는 일은 최선을 다해 사용자가 원하는 것을 해보는 것입니다. 오류가 발생하면 알리십시오.

+0

좋아. 그것은 그것이 가장 좋은 방법이라는 것이 유감이지만 재앙이 아닙니다. – Peter

0

ProcessProcessBuilder.start()입니다.

그런 다음 당신은 당신은 아마 명령이 존재하는지 여부를 알고 ProcessBuilder를를 사용 which 명령을 실행할 수 있습니다

'this-command-not-found' is not recognized as an internal or external command, operable program or batch file.

+0

죄송합니다, 나는 더 분명히해야만했습니다. 나는 그 과정을 시작하지 않고이 일을하고 싶습니다. 상기 프로세스가 부작용 (즉, 'rm')을 갖는지 고려하십시오. 사용자가 호출 할 때까지 시작해서는 안됩니다. – Peter

+0

@Peter, 매개 변수없이 rm을 호출하면 부작용이 없어야합니다. –

0

에 대한 Process.getErrorStream()에서 및 Windows 검사에서 읽을 수 있습니다. 이 경우 which이 시스템에 있어야합니다.

관련 문제