>Java >java지도 시간 >ProcessBuilder와 Runtime.exec(): 외부 명령을 실행할 때 왜 다르게 동작합니까?

ProcessBuilder와 Runtime.exec(): 외부 명령을 실행할 때 왜 다르게 동작합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-15 02:54:02827검색

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.