- PR -

Javaからsudoを実行したい

1
投稿者投稿内容
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2007-02-21 13:05
JavaからRuntime.exe()を使って、MacOSXでsudoを実行したいと考えています。
1)コマンド発行
2)パスワード入力
3)実行
となるのですが、
1)のコマンド発行してパスワード入力までは進めるのですが、
このあと連続してパスワードを入力させようとしてもうまくできません。

うまく応答を待って、次の入力に進むためにはどのような処理を行ったらよいの
でしょうか。下にソースの一部を書きます。

もしくは、他にいいやり方があるのでしょうか。

教えていただければ幸いです。よろしくお願いいたします。
Java 1.4.2
Mac OS 10.4


public boolean exe(String action,char[] password){
Runtime rt = Runtime.getRuntime();
Process pr = null;
InputStream is = null;
try{
String command = null;
if(action.equals("Start")){
command = "./start.sh";
}
else if(action.equals("Stop")){
command = "./stop.sh";
}

String[] commands = {"sudo",command};
pr = rt.exec(commands);
is = pr.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String line = null;
while ((line = br.readLine())!= null) {
}

//パスワード入力を実行
pr = rt.exe("パスワード");
}
・・・・


mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-02-21 13:51
>//パスワード入力を実行
>pr = rt.exe("パスワード");
ん?なぜここで、先のコマンド実行とは別のexecになるんでしょうか…?
パスワードを送らねばならないのは、あくまで先のコマンド実行に対してでは?

もっとも、パスワード入力を標準入力から取っているかどうかは不明ですが。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-02-21 15:49
 標準入力処理をpr = rt.exe("パスワード");でできると思っているのだと思いますが、
out = new PrintStream(pr.getOutputStream());
out.println("パスワード");
とする必要があります。
 ただし、プロセス処理中に入力処理を行う必要があるので、多分入力処理は別スレッドにする必要があると思います。(別スレッドにしないでやったことがない)
 一応(JavaSE6でWindows用ですが)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35682&forum=12
の最後にコマンド入力も処理するソースを書いておきました。

1

スキルアップ/キャリアアップ(JOB@IT)