ProcessBuilder와 Runtime.exec(): 불일치 분석
Java에서 외부 명령을 실행할 때 런타임 간에 불일치가 발생할 수 있습니다. getRuntime().exec(...) 및 새 ProcessBuilder(...).start(). 다음 탐구의 목표는 이러한 차이점을 밝히고 일관된 동작을 달성하기 위한 솔루션을 제공하는 것입니다.
기본 인수 처리
두 접근 방식의 주요 차이점 중 하나는 처리에 있습니다. 논쟁의. Runtime.getRuntime().exec()는 단일 문자열 또는 문자열 배열을 기대하는 반면 ProcessBuilder는 문자열 배열 또는 문자열 목록을 기대합니다. 단일 문자열로 exec()를 사용하면 내부적으로 문자열을 토큰화하여 인수 배열을 생성합니다.
ProcessBuilder 동작
ProcessBuilder의 경우 인수가 전달됩니다. 배열 또는 목록으로, 여기서 각 요소는 인수를 나타냅니다. 그러나 문자열이 적절하게 토큰화되지 않으면 공백을 포함하여 단일 인수가 형성됩니다. 이는 명령이 올바르게 실행되지 않은 예에서와 같이 예기치 않은 동작으로 이어질 수 있습니다.
해결책
ProcessBuilder로 이 문제를 해결하려면 인수가 다음과 같은지 확인하세요. 적절하게 토큰화됩니다.
ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2");
또는 목록이 다음과 같이 될 수 있습니다. 사용:
List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); ProcessBuilder b = new ProcessBuilder(params);
인수를 사전 토큰화하면 원하는 동작을 달성할 수 있습니다.
위 내용은 ProcessBuilder와 Runtime.exec(): 외부 명령을 실행할 때 왜 다르게 동작합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!