質問
私は、CLIプログラムを起動するためにpexpectを使用するスクリプトを持っています。それは少しあなたはいくつかのコマンドを入力することができますプロンプトを取得シェルのように動作します。
私が持っている問題は、私が思うに、このプログラムは色付きのプロンプトを使用していることです。
これは私は何をすべきか。
import pprint
import pexpect
1 a = pexpect.spawn('program')
2 a.expect("prompt>")
3 print "---------start------------"
4 print(a.before)
5 a.sendline("command")
6 a.expect("prompt>")
7 print "---------before------------"
8 pprint.pprint(a.before)
9 print "---------after------------"
10 pprint.pprint(a.after)
これが出力されます:
> python borken.py
---------start------------
A lot of text here from the enjoying programs start-up, lorem ipsum ...
---------before------------
' \x1b[0m\x1b[8D\x1b[K\x1b[1m\x1b[34m'
---------after------------
'prompt>'
最初のプロンプト色分けはライン8で物事やa.beforeをアップborkens何らかの理由で、私は5行目のコマンドは、実際に大量の出力を生成していることがわかり場合でも、通常の印刷が機能しない、文字化けされます。
誰かが、問題が何ができるか知っている、またはそれが色を避けるためにpexpectで端末タイプを設定することが可能であるのか?
私はtcshのシェルを使用しています。
解決
[OK]を、私は答えを見つけました。 CSLの答えは正しい道に私を設定します。
pexpectは私が使うと考えていた「ENV」オプションがあります。このような:
a = pexpect.spawn('program', env = {"TERM": "dumb"})
しかし、これは、私たちの開発環境を私のために動作しません新しいシェルを起動します 環境変数の多くに依存します:/
しかし、私はシェルを産卵する前にこれを行う場合:
import os
os.environ["TERM"] = "dumb"
私は私の問題を修正した色を、サポートされていない「ダム」現在の「TERM」に変更します。
他のヒント
は、端末を設定するための pexpectドキュメントの中で何かを見つけることができませんでしたが、あなたはおそらく可能性シェルで明示的にあなたのプログラムを起動し、そこに端末タイプを設定します:
shell_cmd = 'ls -l | grep LOG > log_list.txt'
child = pexpect.spawn('/bin/bash', ['-c', shell_cmd])
child.expect(pexpect.EOF)
あなたのような何かを試みることができる。
child = pexpect.spawn('TERM=vt100 /bin/bash', ['-c', shell_cmd])
また、初期化ファイルの読み込みを避けるために--norcと同様のではbashを起動することができます。 、bashのmanページをチェックします。