2017-11-23 8 views
0

私はそれを作ることができませんでした。Pythonを使用して "top" linuxコマンドの出力を変数に保存し、grepを使って行を取得する方法を理解しようとすると、Pythonを使ってLinuxプログラムの出力を読み取ることができます(上)

私はサブプロセスモジュールの使用についてpythonのドキュメントを読みましたが、これは正しく動作していないようです。これは、linuxでtopコマンドを実行すると、連続してリフレッシュされるアクティブなウィンドウが表示されるためです。 "Top"は "ls"や "cp"と同じではありません。

私の質問はこれです: どのように私はCPUの割合などのシステム統計情報を取得するためにPythonを使用できますか? (preferebly topコマンドを使用しますが、別のコマンドを使用する場合や、ファイルから統計情報を読み取る場合は問題ありません)

ありがとうございます。

+0

ような何かを試すことができますか? (ちなみに、パイプ(stdin)を介して出力を得ることは非常に可能ですが、継続的な更新が行われるため、しばらく読んでから停止する必要があります) – JohanL

+0

'top -n 1 'は、現在のプロセスをリフレッシュせずに表示します。ファイルの統計情報については、os.stat()を使用してください。 – Pulsar

+0

topでバッチモード-bを実行し、出力を解析することができます。あるいは、/ procファイルシステムについて読むことができます。 – mjr104

答えて

0

samplesオプションtopのコマンドでは、n回のサンプリングが可能です。

top -l 1 
1

トップからの出力を得るために-b-nを使用してみてください:たとえば

-b :Batch-mode operation 
    Starts top in Batch mode, which could be useful for sending output 
    from top to other programs or to a file. In this mode, top will 
    not accept input and runs until the iterations limit you've set 
    with the `-n' command-line option or until killed. 

-n :Number-of-iterations limit as: -n number 
    Specifies the maximum number of iterations, or frames, top should 
    produce before ending. 

$ top -b -n 1 
1

topによってので、次のコマンドを実行すると、その後一度だけと休憩を実行しますデフォルトではncursesを使用しているので、出力を得るのは難しいでしょう。

Pythonにはpsutilというパッケージがあります。あなたは代わりにそれを使うべきです。

あなたが本当にtopを使用する場合は、このモードではmanページ

から-bオプション(バッチモード)

に合格する必要があります、topは、入力を受け付けてまで実行されません-nコマンドラインオプションを使用して、または終了するまで、反復回数を制限します。

だからあなたはあなたがこれまでに試してみました何この

>>> output = subprocess.check_output(['top', '-b', '-n1'])

関連する問題