ProcessBuildergetOutputStreamとプロセスとの相互作用
質問
getOutputStreamを使用したプロセスとのやり取りに問題があります。これが私のコードです: ジェネラコディセタグプレ
出力は次のとおりです: ジェネラコディセタグプレ
this.shは単に「gksudoapt-getinstallfirefox」を実行します
なぜそれが中止され、入力「Y」を受け取らないのかわかりません。
解決
いくつかの問題があります。
最初:gksudo(1)
は、開始するコマンドの標準入力と標準出力を使用して、いくつかの汚い、非標準のトリックを実行します。それはひどく失敗します。良い例は次のコマンドラインです:
ジェネラコディセタグプレ
cat
がデータを配信するとすぐに、echo
の出力と終了が予想されます。いいえ。 gksudo
とcat
の両方が永遠にぶら下がっています。出力なし。
ユースケースは ジェネラコディセタグプレ
これも機能しません。これが解決されない限り、起動したプログラムでユーザー入力が必要な場合は、リモートコントロールを忘れることができます。
2番目:Rogerがすでに指摘しているように、waitFor()
はコマンドの終了を待ちます。これは、ユーザー入力がなく、gksudoの問題があるとすぐには起こりません。
3番目 waitFor
を少し押し込んだ後、次のブロッカーがあります。EOFまでのプロセスの完了出力を待ちます。これはすぐには起こりません(「最初」と「2番目」を参照)。
4番目プロセスがすでに2回停止した後(「2番目」と「3番目」を参照)にのみ、何らかの入力が得られる可能性があります。 >>
この一連の問題を解決する代わりに、より良い、はるかに簡単な方法があるかもしれません。標準入力でY
を制御しようとしないでください。質問に自動的に「答える」適切なオプションをいくつか与えるだけです。簡単な\n
は、いくつかの候補を見つけます:
ジェネラコディセタグプレ
詳細はマニュアルをご覧ください。
これがより良い、より安定した方法だと思います。
PS:今、私はpi *** o *** apt-get install
ですので、上記の暴言を許してください。