2017-03-04 6 views
2

libtmuxを使用し、libtmuxはセッション、ウィンドウおよびペインを制御するためにTmuxを呼び出すためにsubprocess.Popen()を使用します。ペインのタイトルを設定するには、Tmuxはエスケープシーケンスを送信する必要があります。このコマンドはsubprocess.Popen(によって発行された場合os.system()とsubprocess.Popen()はPythonのエスケープシーケンスを終了します

tmux send-keys -t 0 " printf '\033]2;%s\033\\' 'Pane Title'" C-m 

)またはos.system() - あまりにも他のものとすることができ、私はこれらの2をテストしてみた - エスケープsquenceはありません:これは予想通り、コマンドラインで動作しますそれをシェルにしないでください。私は、ファイルに送信されたコマンドをloggし、ログファイル内の値が正しく表示されますが、送信された場合にのみ、これは生き残る:

printf '2;%s' 'Pane Title' 

私は、このコマンドを実行することで、これをテストしてみた:

echo "printf '\033]2;%s\033\\' 'Pane Title'" > /tmp/setname 

コンテンツ/ tmp/setnameは上記のものです。

最後に使用Methodeのはtmux_cmdであり、私はこのようなsend_keysを経由して、それを呼び出す:

p.send_keys("printf '\033]2;%s\033\\' '" + names[i] + "'") 

"p" はペインのオブジェクトです。私の投稿hereを参照してください。

私の質問は、Pythonでエスケープシーケンスを使用してシェルコマンドを発行する方法ですか?

+1

あなたは私達にあなたのpythonコードを表示することができますか? –

+0

あなたはエスケープシーケンスに誤字があります: '[' 'の代わりに'] '。 FWIW、私は 'os.system'または' subprocess'のどちらかを使ってKDE konsole端末にエスケープシーケンスを送ることに問題はありません。ここに私のテストコードがあります。 'import os、subprocess'' cmd = 'echo "これは\ 033 [32mcoloured \ 033 [0mテキスト"'; os.system(cmd); subprocess.call(cmd、shell = True) 'です。 Python 2.6と3.6でテストされています。 –

+1

@ PM2Ring OPが生の接頭辞を使用しているかどうかを確認するコードを見たいと思っていました(その場合は使用しません) –

答えて

0

"未処理のプレフィックス"は私が逃したものでした!ありがとうJean-François Fabre

これは動作します:

p.send_keys(r"printf '\033]2;%s\033\\' '" + names[i] + "'") 
関連する問題