2011-12-11 4 views
0

(예외가 발생) 자바에서 작동하지 않습니다 다음 정확하게 자바의 구현 왜에 다른 무엇Java의 java.lang.Runtime.exec()와 PHP의 exec() 사이의 차이점은 무엇입니까?

exec("cd mydir; myprog"); 

가 (이 보인다 : PHP에서

Runtime.getRuntime().exec("cd mydir; myprog"); 

같은 작품 잘 언뜻보기에는 더 제한적 임)?

+1

동일한 작업 디렉토리에서 두 프로그램을 모두 실행하고 있습니까? 예외는 무엇을 말합니까? – BoltClock

답변

2

자바 간부 명령은 하지 시스템 명령 인터프리터를 사용한다. "cd mydir; myprog"와 같은 것은 시스템 명령 행 인터프리터 (예 : windows cmd, 리눅스의 sh)를 두 개의 분리 된 명령으로 분할하고 각각을 실행하는 것에 달려 있습니다. java는 시스템 명령 인터프리터를 호출하지 않으므로 작동하지 않습니다. 각각의 명령을 개별적으로 호출하거나 명령 행의 일부로 원하는 인터프리터를 직접 호출해야합니다.

+0

좋습니다. 그렇지만 왜 그렇게 구현되었는지 궁금합니다. 왜 PHP처럼 명령 인터프리터를 사용하지 않습니까? 나에게는 불필요한 제한 사항처럼 보입니다. – Ree

+0

은 명령 행 인터프리터의 도움에 따라 아마 플랫폼에 독립적 인 자바의 시도와 충돌 할 것이다. 분명히, 당신이 exec를 호출 할 때, 당신은 아마 그 영역에서 벗어 났을 것입니다 ... 일반적으로 java는 기본 OS에 "원시"액세스를 허용하기를 주저했습니다. 그리고 제공 될 때, 일반적으로 "가장 기본적인"레벨입니다. 이 경우 "가장 기본적인"레벨은 직선 명령을 실행할 수있게합니다. – jtahlborn

-1

애플릿을 실행 중이며 서버의 CLI 환경에서 Java가 아닌 것으로 가정합니다. 그렇다면 Java 런타임은 서버가 아닌 클라이언트 컴퓨터에서 실행 중입니다.

Java에는 세미콜론보다 여러 명령을 처리하는 더 좋은 방법이 있습니다.

Runtime.exec(String[]) 

을 및 문자열 배열의 요소 명령의 각 인수합니다

Runtime.exec(String) 

시도는 당신의 명령을 각각에 대해이 작업을 사용하는 대신 서명을 사용하는.

0

저는 사람들에게 이런 문제가 있다는 것을 알았고 여러 가지 방법이있을 것이라고 확신합니다. 그러나 대부분의 사람들이 회신하는 것을 보았습니다. 앞에 cmd를 추가하십시오.

Runtime.getRuntime().exec("cmd cd mydir; myprog");