티스토리 뷰
앞에 글에서 명령어를 파라미터로 받으면 어떤 명령어 이던지 실행이 가능 하니 파라미터로 받는것을 해보겠다.
사실 어렵지 않고 간단하다.
메인 메소드에
if(args.length==0){
System.out.println("파라미터를 입력하세요.");
}else{
String para=args[0];
Exe.execute(para);
}
이 부분만 추가했다. 그럼 전체 소스를 살펴보자.
public class Exe {
public static void main(String[] args) {
if(args.length==0){
System.out.println("파라미터를 입력하세요.");
}else{
String para=args[0];
Exe.execute(para);
}
}
/**
* cmd 명령어 실행
*
* @param cmd
*/
public static void execute(String cmd) {
Process process = null;
Runtime runtime = Runtime.getRuntime();
StringBuffer successOutput = new StringBuffer(); // 성공 스트링 버퍼
StringBuffer errorOutput = new StringBuffer(); // 오류 스트링 버퍼
BufferedReader successBufferReader = null; // 성공 버퍼
BufferedReader errorBufferReader = null; // 오류 버퍼
String msg = null; // 메시지
List<String> cmdList = new ArrayList<String>();
// 운영체제 구분 (window, window 가 아니면 무조건 linux 로 판단)
if (System.getProperty("os.name").indexOf("Windows") > -1) {
cmdList.add("cmd");
cmdList.add("/c");
} else {
cmdList.add("/bin/sh");
cmdList.add("-c");
}
// 명령어 셋팅
cmdList.add(cmd);
String[] array = cmdList.toArray(new String[cmdList.size()]);
try {
// 명령어 실행
process = runtime.exec(array);
// shell 실행이 정상 동작했을 경우
successBufferReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
while ((msg = successBufferReader.readLine()) != null) {
successOutput.append(msg + System.getProperty("line.separator"));
}
// shell 실행시 에러가 발생했을 경우
errorBufferReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));
while ((msg = errorBufferReader.readLine()) != null) {
errorOutput.append(msg + System.getProperty("line.separator"));
}
// 프로세스의 수행이 끝날때까지 대기
process.waitFor();
// shell 실행이 정상 종료되었을 경우
if (process.exitValue() == 0) {
System.out.println("성공");
System.out.println(successOutput.toString());
} else {
// shell 실행이 비정상 종료되었을 경우
System.out.println("비정상 종료");
System.out.println(successOutput.toString());
}
// shell 실행시 에러가 발생
if (errorOutput.toString().length()>0) {
// shell 실행이 비정상 종료되었을 경우
System.out.println("오류");
System.out.println(successOutput.toString());
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
process.destroy();
if (successBufferReader != null) successBufferReader.close();
if (errorBufferReader != null) errorBufferReader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
그런데 윈도우에서는 잘 출력이 되는데 리눅스에서 실행하면 결과 출력되는 여러줄 중에 맨 마지막 줄만 출력되거나 출력이 되지 않는다. 실행은 된다. 개행문자 차이(?) 같은 느낌이 드는데 아시는 분은 댓글을 달아주면 감사하겠습니다~~
'자바(Java)' 카테고리의 다른 글
리눅스 자바 이너클래스 inner class $1.class 파일 삭제 방법 (0) | 2020.01.28 |
---|---|
자바 rmi java.rmi.ConnectException: Connection refused to host: 10.1.1.1; nested exception is: java.net.ConnectException: Connection refused: connect (0) | 2020.01.23 |
자바 리눅스 쉘 실행 (0) | 2020.01.22 |
[JAVA] 자바 rmi(remote method invocation) 샘플 예제 코드 (3) | 2020.01.17 |
자바 jsp 파일 다운로드 (0) | 2019.12.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- EC
- 오라클
- 자바 smtp
- 인포믹스
- MySQL
- 이클립스
- esql
- ocjap
- 프로씨
- 문자열
- 파이썬
- xe애드온
- 파싱
- 라이믹스 모듈
- php
- 자바
- ocajp
- XE3
- 플러터
- KG
- XE
- Python
- 포인터
- JDBC
- webix
- 스크래핑
- xe addon
- C
- proc
- C언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함