2017-01-31 17 views
-2

pythonで端末stdinをハイジャックする方法はありますか? Unixのみのソリューションはうまくいくでしょう。pythonから端末stdinをハイジャックする

現在、名前付きプロセスを監視できるように、topの小さなラッパーを作成しています。すべて実行中のPythonインスタンス。基本的に私はpgrepを呼び出してプロセスIDを取得し、-pオプションを使用してtopを実行します。

全体的にこのスクリプトは、数年前にはうまく機能しています(top -pは20ピッドのものしか受け付けていません)。しかし、名前パターンに一致する新しいプロセスが生まれた場合には、スクリプトを調整して呼び出しを一番上に更新したいと思っています。これは比較的うまく機能しますが、... topで対話的に設定されたオプションは、pidリストを更新するたびに失われますが、停止して再起動すると自然な原因となります。top。したがって、私は、何らかの設定が影響を及ぼしているものをバックトラックすることができるように端末の標準入力をハイジャックしたいので、pid-listを更新した後に適切に設定したり、必要であればアップデートを停止することもできます。ユーザー)。

今、私が達成しようとしている、おそらく何がちょうど愚かであると、それを行うには良い方法がありますので、私は非常に

を悟り感謝した場合(ああ。タグpsはないtopタグとして使用されましたあなたはハックのビットのように音をやっているのp

+0

私はトラブルこれを解析を抱えています。どのような対話型オプションについて話していますか?私はあなたが "バックトラック"を意味するかどうかはわかりません。何をstdin以上に送ろうとしていますか?おそらく何をしているのかのログを投稿しますか? psutilをチェックしてくださいhttps://pypi.python.org/pypi/psutil – RobertB

+0

こんにちはRobert、 'top'のmanページで読んでみたいと思うかもしれませんよねy – cpaitor

+0

本当に何ですか?私はトップに精通しています。私はちょうどあなたのポストを読むことを試みていて、混乱しています。 – RobertB

答えて

0

\

感謝)が存在し、全ての2つのユーティリティが関連している後、私は、新しいタグを定義するためにここに新しいしてるではありません。私はちょうどあなたが欲しいものを行うpsutilを使ってPythonスクリプトを書くだけです。あなたが興味を持っている情報が何であれ、psutilはそれをあなたに与えるべきです。

クイックや汚れ:ドキュメントへ

import psutil 
import time  

while True: 
    processes = [ p for p in psutil.process_iter() if 'python' in p.name() ] 

    for p in processes: 
     # print out whatever information interests you 
     print(
       p.pid, 
       p.name(), 
       p.cpu_percent(), 
       p.io_counters().read_bytes, 
       p.io_counters().write_bytes 
       ) 
    time.sleep(10) 

リンク:http://pythonhosted.org/psutil/

関連する問題