63125


サブプロセスとして起動したbashに、カーソル↑キーを送信したいと思っています。

そのために、以下の実験コードを書きました。

[code]

    import os
    
    p = os.popen('bash -i', 'w')
    p.write('echo test\n')
    p.write('\x1b[A\n')
    p.write('exit\n')
    p.close()
    
[/code]

結果として、ターミナルエミュレータから実行した場合と、  
テキストエディタから実行した場合で挙動がことなります。  
これはどのような仕組みでこうなるのでしょうか。  
何卒ご教示ください。

ターミナルエミュレータから実行した場合は、想定通りの動作をします。

[code]

    $ python test.py
    user@ubuntu18:~$ echo test   <- bashが起動して"echo test" が実行される
    test
    user@ubuntu18:~$ echo test   <- カーソル↑により"echo test" がまた実行される
    test
    user@ubuntu18:~$ exit        <- bashが終了する
    exit
    $                 
    
[/code]

テキストエディタ(emacs)から実行した場合は、エスケープシーケンスが認識されません。

[code]

    test
    bash: line 2: $'\E[A': command not found
    
[/code]

環境はUbuntu18.04です。


CC BY-SA 4.0
2019-02-01T05:36:17.580
52470
2020-02-17T13:53:40.740
2019-02-01T06:49:59.300
28998
28998
question
python linux bash
サブプロセスのbashにエスケープシーケンスを送信したい


(コメントより)

エスケープシーケンスが認識されていない様なので、emacs のシェルで `export TERM=vt100` を実行してみるとよいかもしれません。


CC BY-SA 4.0
2020-02-17T13:53:40.740
63125
2020-02-17T13:53:40.740
754
52470
answer