ugnagブログ

たいした内容はありません。思いつきで書いているだけ。
開発日記がメインかな。

<< 自炊してます | main | スキャナー処理 >>

[Java]まったくわけがわからないこと

「どうしてこうなる?」という現象。
もしかしたら、正常な動作なのかもしれない。
自分が知らなかっただけなのかもしれない。

が、非常に訳がわからない現象が起こった。


やったことは、Javaによる外部プロセスの起動。
具体的には、saneというスキャナー操作用のプログラムを起動する。

ちなみにコマンドは「scanimage」という。

あ、linux上のことです。


で、Javaからのプロセス起動によりscanimageコマンドを実行する。
引数は、いろいろあるのだが、今回起こったものは、
--source
という引数で原稿を読む面などを指定するものだ。


重要なところだけ書くと、

--------------------------------------
ArrayList list = new ArrayList<>();

list.add("scanimage");
list.add("--source \"Automatic Document Feeder(centrally aligned,Duplex)\"");

ProcessBuilder processBuilder = new ProcessBuilder(list);
Process process = processBuilder.start();
--------------------------------------

と言った具合だ。


これをいくらやっても、scanimageからは、「引数がおかしい」というエラーメッセージが返ってくる。

ちなみに、terminalでコマンドを打ち込むと、正常に動作する。
つまり、
scanimage --source "Automatic Document Feeder(centrally aligned,Duplex)"
とした場合キチンと動作することは、以前から確認している。

Javaでのコーディングで間違いがあるのかと思い、コーディング上の文字列と、terminalで実行するコマンド(シェルプロにした)を比べて見たが(テキストエディタ上で、上下に並べて比べてみた)が、一字一句間違っていない。


なぜ、terminalからは動くコマンドがJavaからでは動かないのか?
(正確には、引数が正しく解釈されていない?)


さっぱり、訳がわからず、ダメ元で次のように変えてみた。

list.add("--source=\"Automatic Document Feeder(centrally
aligned,Duplex)\"");

つまり、--sourceの後が、空白だったのを=にしてみた。


すると、なんと動作したのだった。
これにはもっと訳がわからなくなった。

scanimageのヘルプでも、--source引数は空白に続いてパラメータを書くという説明になっている。
なぜイコールでいいのか。


もしかしたらterminalが引数の空白をイコールに変えてプログラムに渡しているのか?

この件は、もう少し調べてみるが、解決しないような気がする。
プログラム・開発(その他開発) | comments (0) | -

Comments

Comment Form

本文に書いて下さい
本文にh抜きで書いて下さい