nano 等の cursesベースのプログラムを動かす為には、
単純な対話シェル環境ではなく、完全な端末のエミュレーションが必用です。
subprocessやpopen を使った簡易的な Read-Eval-Print-Loop ではなく、
pty を用いて端末とやり取りをする方法。
残念ながら tcl/tk でも端末エミュレーターを
ウィジェットとして提供されてる実装はありません。
実装面では、大まかに2通りのアプローチがあり
- 外部アプリケーションのウィンドウを tkinter へ組み込む方法
- 端末エミュレーターを独自に実装する方法
利点・欠点は簡潔にまとめると
前者は設置するだけなら簡単ですが拡張が難しく、
後者は最初の実装は大変だけど拡張時の自由度は高い。
マルチプラットフォーム対応にはもうひとつ課題があり、
仮想端末の扱いは標準ライブラリに pty モジュール がありますが、
対象プラットフォームが unixのみなので windowsでは代替が必要です。(winpty, yawinpty, 他)
今までにtkconを試しましたが、nano等が動きません。固まります。
tkcon は tcl/tk の、Pythonに対する IPython 的な立ち位置です。
pyteを使用しようと考えましたが、使い方がよくわかりません。
pyte を利用する場合、キー入力を端末に伝えるのと、
View に当たる部分を tkinter で実装する必要があります。
参考:
Qt向け/ブラウザベースの端末ウィジェット xterm.js 利用
取り急ぎ投稿します。昔調べたことがあり、
expectを用いた実装等あったのですが、古くなっていた情報が多くて再調査してます。
後日、追記・編集するかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/23 09:19
2021/01/23 12:58 編集
2021/01/24 16:03
2021/01/25 01:01 編集