2017-05-01 9 views
0

stdoutでスクリプトによって生成された出力の一部を削除する方法を探しています。私はos.system("ls")呼び出すスクリプトのこの時点で特定の行までのPythonクリーン出力コンソール

line 1: some text... 
line 2: other text... 
line 3: and so on... 

、これは私が事前に知ることができないんだけど、出力の量と、現在のディレクトリ内のファイルのリストを生成します。私たちは、出力は次のされていると。だから、stdoutが

line 1: some text... 
line 2: other text... 
line 3: and so on... 
line 4: file1 
line 5: file 2 
... 
line n: file n 

ように更新されます私はラインにライン3によって標準出力きれいにしたいのnが、私はどのように行うのか分かりません。私はすでに\033[sをエスケープして(そして、\033[Kエスケープを使って1行ずつ)3行目のカーソル位置を保存しようとしましたが、これは機能しません(私のシステムは\033[sをサポートしていません)。私はエスケープ\033[<L>;<C>Hを使って3行目に戻ることができますが、最後までテキストを削除する方法(または3行目まで行を削除する方法)を理解できません。 誰かがそれを行う方法を知っていますか? ご迷惑をおかけして申し訳ございません。ありがとう

+0

出力を元に戻そうとしていますか?すなわち、プリントアウトライン1、ライン2、ライン3、次にライン1に戻りプリントアウトする。これはウィンドウでは機能せず、特定の端末だけが実際にこれを行うために特殊文字をサポートしています。ウィンドウ上で\ bを使って同じ行に戻ることができます*しかし、あなたは後ろに行くことはできません。ウィンドウ上の選択肢は画面全体をクリアすることですが、これは通常、実際に端末の出力をクリアするのではなく、\ n文字を出力します。 Windowsは高度な機能にも独自のAPIを提供していますが、クロスプラットフォームではありません。 – snb

答えて

1

端末で手を触れるのではなく、呼び出されたプロセスからstdoutをキャプチャし、最初の3行を自分のstdoutに出力して、出力を無視するか、単にプロセスを終了します。実際に実行しているのがlsの場合は、glob -moduleが便利です。

+0

私はあなたのアドバイスを理解していない。このようにして、lsの出力は「非表示」になります。この場合、これは私の解決策ではありません。ユーザーは1つのファイルを選択する必要があるため、ディレクトリの内容を表示する必要があります。その後(リストディレクトリを持つすべての行はガーベッジです)、行4はファイルを選択したことを示し、スクリプトは他の出力と一緒に進みます。 –

関連する問題