- ベストアンサー
外部コマンドを実行する方法
sdk 1.4.2_08 OS WindowsXp try{ Process process = Runtime.getRuntime().exec(...); }catch(IOException e){} を使用して,コマンドを実行しようとしています.しかし,IOExceptionとなってしまいます. exec(...) に記述してある内容をコピーして,コマンドラインから実行できることは確認しましたし,パスも大丈夫でした. また空白が認識されない場合があることから, String cmd[] = {"コマンド","引数1","引数2"}; Process process = Runtime.getRuntime().exec(cmd); と行ってもダメでした. また,ためしにこのコンパイル済みのclassファイルをLinuxで動作させたところ,正常の動作できることがが確認できました.(windowsとLinuxに同じ名前のコマンドがあるのです.また,Linuxは fedora core4 です.) Windows上のコマンドに問題があるようなのですが,何か原因となる要因が,他にもありそうでしたらアドバイスお願いいたします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと検索してみただけで確信ないですけど、mknmzってperlスクリプトじゃないですか。 LinuxはともかくWindowsにはperlスクリプトをプロセスとして起動する機能はないですよ。 Windowsでは起動するプログラムはperlにして、その引数としてmknmzを指定するようにすればどうですか。
その他の回答 (2)
- PCFREAK
- ベストアンサー率51% (417/805)
Windows環境でmknmzへのPATHが通ってないのでしょう。 runtime.exec("c:\namazu\mknmz ....") と絶対パス指定するのが一番確実です。
補足
ありがとうございます. 質問にも書きましたがPATHの確認はとってあります.また,ご指摘の通りにしてみても出来ないという確認もとってあります. なんでなんでしょう・・・.
- Bonjin
- ベストアンサー率43% (418/971)
IOExceptionのメッセージは何と出てますか?
補足
すいません. 実行しようとしているコマンドは,内部コマンドではないコマンドです. 具体的には,namazu という検索エンジンのindex作成をを,javaから行おうとしており, "mknmz -aO c:\namazu\index c:\pdf" です. そのため,具体的なエラーは java.io.IOException: CreateProcess: mknmz -aO c:\namazu\index c:\pdf error=2 です. 宜しくお願いします.
お礼
ありがとうございます. namazuを使う際に,コマンドからは namazu というコマンドと mknmz という2つのコマンドがありますが, mknmzだけがperlスクリプトでした. windowsではbatファイルになっているために,javaから実行できなかったようです.そこで,拡張子 bat をpl に変更し,以下のようにコマンドを実行することで解決できました.ありがとうございます. "perl c:\namazu\bin\mknmz.pl -aO c:\namazu\index c:\pdf"