問題タブ [python-curses]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2196 参照

python - Python Curses: プログラムをすばやく終了する

curses モジュールを使用する無限ループで Python プログラムをすばやく終了する最良の方法は何ですか?

ループの最後にこれと結合した nodelay() メソッドを追加しようとしました:

ただし、ループの 1 回の反復ですべての関数呼び出しを行うには 2 ~ 3 秒かかります。また、アプリケーションのために、5 秒ごとよりも頻繁にループを実行しても意味がありません。これは、プログラムを終了する方法が機能するために、「q」を 2 ~ 8 秒間押し続ける必要があることを意味します。

私のコードは次のようになります。

私の他の解決策は、 while True を次のように置き換えることでした。

この方法では、プログラムを終了するために「q」を押し続ける必要はありません。ただし、「q」を 1 回押した後、終了するまでに最大 8 秒かかる場合があります。

明らかな理由から、これはプログラムを終了する最良の方法ではないようです。私は、より良い(より速い)解決策があるはずだと確信しています。

それ以外は、プログラムは正常に動作します。これは 2 つのファイルで 300 行以上あるため、コードの関連部分だけを試した解決策とともに投稿しています。

0 投票する
1 に答える
369 参照

python - インタラクティブなpythonアプリケーションからcdコマンド(サブシェル?)にstdoutを渡す

またはstdoutなどのコンソール GUI を起動するインタラクティブな Python スクリプトを使用して、を引き継ぐ場合。いくつかのアクションを実行してループを閉じた後、で印刷されたパスに移動するにはどうすればよいですか?cursesurwidcdstdout

例えば、

q実行時にまたはを押してループQを終了する場合:urwid

これが にのみ出力する単純な python スクリプトであればstdoutcd $(python simple_script.py). ただし、上記の場合、python サブシェルがstdout入力のハイジャックと処理に失敗するため、これはハングします。

ファイルに書き込まずにこれを回避することは可能ですか?

0 投票する
1 に答える
1324 参照

python - curses を使用してコンソールに複数の列を簡単に表示する方法は?

curses を使用して複数の列でコンソールにデータを出力したいと思います。そうするための簡単なアプローチは何ですか?

現在、私のアプリケーションは次のような情報を出力します。

これにより、次の出力が得られます

ただし、私が持ちたいのは次のようなものです。

結果は次のようになります。

これを達成する簡単な方法は何ですか?line 1line 11、 、 、 、 、 、 、 、 、 、 、 line 21line 2line 12line 22、 、などの順序で反復するためにイテレータを使用し、空白を取得するためにline 3使用する必要がありますか?line.ljust(30, " ")

または、curses で複数の画面を作成する必要がありますか?

他にもっと単純な解決策はありますか?

私は呪いにかなり慣れていないので、一般的なアドバイスと例は素晴らしいでしょう。

0 投票する
1 に答える
1105 参照

python - Python スクリプトを長時間実行するとクラッシュする

Raspberry Pi 3 で python 2.7 スクリプトを実行しています。

基本的には、UART を介してチップにメッセージを送信し、応答メッセージを取得し、ログ ファイルを更新して、UI (python curses によって作成されたモニターに表示される UI) に出力します。これは 1 秒ごとに行われます。

スクリプトには 32 時間実行されているバグがなく、その後クラッシュします。UI がクラッシュし、「shsh を開けません: 共有ライブラリの読み込み中にエラーが発生しました: libc.so.6 : 共有オブジェクト ファイルを開けません...」というエラー メッセージが表示されます。 Python スクリプト

Raspberry Pi のメモリ状態を確認しました。Python プロセスは、32 時間目に総メモリの約 1/4 を使用します。したがって、クラッシュの原因はメモリではありません。また、モニターなしで実行しようとしましたが、python.curses なしで偽の UI クラスを起動します。同じクラッシュが 32 時間目に発生しました。

さて、スクリプトがクラッシュする理由がわかりません。

0 投票する
1 に答える
555 参照

python - Pythonの呪い:Pool.mapのマルチプロセッシングの問題?

のモジュールとPool.mapの組み合わせに問題があります。UI ブレークでより大きなワークロードを計算すると、デフォルトの画面に反応しなくなります。押されたキーを即座に読み取る (そして解析を続行する) 代わりに、Enter キーを押すまで任意の数のキーを押すことができます。時々 (それに加えて) UI が壊れることさえあります (通常のシェルの一部を表示するなど)。cursesPythonPool.mapcursesgetch


Curses UI ラッパー

Screenこれは、curses UI を処理するラッパー クラス ( ) です。


実際のプログラム

Pool.map上記の失敗は、UI 内で結合し、cursesワークロードが高い場合に常に発生するため、小さな例を作成しました。このコードは、配列で役に立たないものをmult計算するだけです。addnumpy


ここで、ワークロードが高いコードを実行すると (つまり、形状の配列をクランチする(8, int(1e7)と、10,000,000 列の 8 行に相当します)cursegetch中断し、次の動作が発生します。

ここに画像の説明を入力

qご覧のとおり、何度でも (または他のキーを)curse叩くことができますが、getchは反応しません。入力を認識させるには、Enter キーを押す必要があります。

さらに、何らかの理由で最初の行が元のシェルの出力で上書きされます。

この動作は、おおよそ の計算にPool.map1 秒以上かかる場合にのみ発生します。

data_arrすべてが魔法のように機能するような小さな配列に設定するnp.random.rand(8, 100)と、計算に1秒以上かかる大きな配列をフィードするとすぐに、この奇妙なバグが現れてcursesUIが壊れます。

何か案は?

Pool.mapどういうわけかワーカープロセスに正しく参加していませんか?

0 投票する
1 に答える
110 参照

python - Python cursesで入力文字列の有無にかかわらずサブウィンドウをエスケープするにはどうすればよいですか?

Python curses では、scr.subwin() を使用してサブウィンドウを描画し、以下のように getstr() 関数で入力を取得するとします。

そして、私は何の入力も提供しないことにしました。新しいサブウィンドウをエスケープするにはどうすればよいですか?

ありがとう