2012-11-15 4 views
0

OS X 10.8의 Java 응용 프로그램에서 실행하는 외부 스크립트를 가져 오는 데 문제가 있습니다. 그것은 윈도우에서 작동하므로하지 내가 OS X 용 잘못하고 있어요 무엇인지 잘 작동 무엇OS X의 Java 응용 프로그램에서 외부 스크립트 실행

(윈도우) :

String[] commands = { 
    "\"" + _appDataDir + "\\Temp\\Workers\\" + _batchName + "\"", 
    "\"" + _appDataDir + "\\Temp\\frame%d.jpg\"", 
    "\"" + _fileName + "\""}; 
proc = rt.exec(commands); 

그래서 OS X에 대해 다음 한 :

String[] commands = { 
    _appDataDir + "/Temp/Workers/" + _batchName, 
_appDataDir + "/Temp/Workers/mac-ffmpeg", 
_appDataDir + "/Temp/frame%d.jpg", 
"\"" + _fileName + "\""}; 
proc = rt.exec(commands); 

이것은 파일 이름에 공백이 없지만 "java.io.IOException : Bad file descriptor"오류가있는 공백이있을 때 실패합니다.

현재 모든 경로를 쉽게 고칠 수있는 공백이 없어졌지만 저장 대화 상자에서 사용자가 선택 했으므로 fileName 문자열을 제어 할 수 없습니다. 나는 fileName 주위에 큰 따옴표를 넣지 않고 시도했지만 아무런 차이가 없다.

ProcessBuilder proc2 = new ProcessBuilder(
    "/bin/bash", 
"-c", 
_appDataDir + "/Temp/Workers/" + _batchName, 
_appDataDir + "/Temp/Workers/mac-ffmpeg", 
_appDataDir + "/Temp/frame%d.jpg", 
"\"" + _fileName + "\"" 
); 
proc = proc2.start(); 

을하지만 동일한 오류 준다 :

는 또한 아래와 같이 (상기와 "/ 빈/떠들썩한 파티/-c"비트없이 모두) ProcessBuilder를 시도했다. 내가 할 수있는 한 다른 비슷한 질문에서 제안되는 모든 것을하고 있지만 아무것도 작동하지 않는다는 것을 알 수 있습니다. 어떤 아이디어라도 감사 할 것입니다!

답변

1

"\"" + _fileName + "\"" 주위에 따옴표가 필요하지 않습니다. 단 _fileName 만 사용하면됩니다. Runtime.exec (또는 ProcessBuilder)에 배열을 제공하면 이미 명령을 "단어"로 분할했습니다. 따옴표를 추가하면 이름이 실제로 큰 따옴표 + _fileName + 인 파일을 찾도록 지시하는 것입니다. 그냥 _fileName보다 큰 따옴표를 사용하십시오.

실제 문제는 다른 프로그램을 호출하여 실제 작업을 수행하는 쉘 스크립트 인 _batchName 프로그램 내에있을 가능성이 큽니다. 해당 스크립트 내에서 당신은 $1, $2$3mac-ffmpeg, frame%d.jpg_fileName 인수를 받게됩니다, 그들은 제대로 스크립트, 예를 들어, 내 을 인용 있음이 확인해야 스크립트가 현재 말한다면

processFile $3 

같은 그런 다음 당신은 공백을 포함 파일 이름에 대처하는 경우가

processFile "$3" 

말을 변경해야합니다. 아니면 한 번에 여러 파일을 처리하도록 설정되어있는 경우 :

processFiles $* 

은 다음

위대한
processFiles "[email protected]" 
+0

, 덕분에 그를 교체해야! 스크립트 자체에서 따옴표를 사용하는 것이 트릭을 완료했습니다. 여기서 나를 던진 것은 스크립트를 실행하고 터미널에서 인수 (큰 따옴표로 묶음)를 전달할 때 문제가 없었기 때문에 스크립트보다는 Java 코드로 문제가 있다고 가정했기 때문입니다. – aritchie

관련 문제