2016-04-18 18 views
3

ctrl-rをbashで押すと、(reverse-i-search)プロンプトが表示されます。 PythonでPythonのサブプロセスでctrl-rをbashに送信する

、私は今、私はこのプロセスにctrl-r情報を送信し、Pythonで(reverse-i-search)プロンプトを読み取ることができ、この

p = subprocess.Popen(['bash'], stdin=subprocess.PIPE, 
     stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

のようにbashのプロセスを開くことができますか?

ptyを使用せずに端末エミュレータをコード化することが可能かどうかは、ptyを学んでいます。

+1

理論的には、 'showkey --scancodes'を実行して、全く同じ出力をサブプロセスに書き込むことができます。どのような理由であれ、私の仮想マシンで入出力を行うことはできませんが、誤解していない場合は 'p.stdin.write(b '^ R)'と同じくらい単純なはずです。 – Torxed

+0

VM内で送信する必要があるため、これが必要ですか? – EugenG

+0

@iugeneこれができるかどうか不思議です。 – zjk

答えて

2

bashプロセスに文字コードを送信するだけで十分です。

しかし、bashが端末に接続されていないと判断した場合は、非対話型モードを使用します。そのモードでは、行編集は無効になります。だから、bashはのctrl-rに反応しません。対話モードを取得するには、bashをbash -iとして開始する必要があります。

(そして、あなたが送信者とbashのプロセスとdifferntエンコーディングを使用しているまれなケースでは、あなたはCTRL-R用propperの文字コードを使用していることを確認。)

だから、あなたは自分の一例でしょう与えられました対話モード(行編集可能)でbashを開始するには、

p = subprocess.Popen(['bash', '-i'], stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE, stderr=subprocess.PIPE); 

を使用する必要があります。

p.stdin.write('\022'); 

検索機能を開始するには:次に、あなたは(あなたがすでに仮定として)使用することができます(ASCII互換エンコーディングを想定)。 (もちろん、p.stdinがbashサブプロセスのstdinを表していると仮定しても)

+0

作業中のスニペットがあれば素晴らしいことでしょう。 – zjk

関連する問題