2012-03-16 27 views
7

私はこのlinuxコマンドをpythonから実行し、出力を変数に割り当てる必要があります。Pythonからlinuxコマンドを実行する

ps -ef | grep rtptransmit | grep -v grep 

これを行うにはpythonsコマンドライブラリを使用しようとしました。

import commands 
a = commands.getoutput('ps -ef | grep rtptransmit | grep -v grep') 

しかし、aは切り捨てられます。

'nvr  20714 20711 0 10:39 ?  00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media camera=6 stream=video substream=1 client_a' 

が、予想される出力は次のとおりです:私が手に出力され

nvr  20714 20711 0 10:39 ?  00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media camera=6 stream=video substream=1 client_address=192.168.200.179 client_rtp_port=6970 override_lockout=1 clienttype=1 

誰もが切り取らなったり、誰もが別の方法を提案することができますからの出力を停止する方法を知っていますか?

答えて

8

ps明らか端末の推定幅に収まるように、その出力を制限します。この幅は、$COLUMNS環境変数、または--columnsオプションを使用してpsに変更することができます。

commandsモジュールは推奨されていません。 subprocessを使用してps -efの出力を取得し、Pythonで出力をフィルタリングします。他の回答で提案されているようshell=Trueを使用しないでください、それは、この場合、単に余分です:

ps = subprocess.Popen(['ps', '-ef', '--columns', '1000'], stdout=subprocess.PIPE) 
output = ps.communicate()[0] 
for line in output.splitlines(): 
    if 'rtptransmit' in line: 
     print(line) 

はまた、あなたは直接、特定のプロセスを検索することができたことでpgrepコマンドを見てとることができます。

3

私は通常、外部コマンドを実行するのにsubprocessを使用します。あなたのケースのために、あなたは出力がout変数になり、次の

from subprocess import Popen, PIPE 

p = Popen('ps -ef | grep rtptransmit | grep -v grep', shell=True, 
      stdout=PIPE, stderr=PIPE) 
out, err = p.communicate() 

ような何かを行うことができます。

+1

-1は、 'grep'と' shell = True'の無駄使いです。 – lunaryorn

+0

'shell'は、コマンドでパイプを使いたい場合に必要です。 'grep'については、私は実際に質問からコマンドをコピーして貼り付けました。 grepコマンドは、grepコマンドで実行されることがあるため、削除する必要があります。これは実際には 'grep [r] tptransmit'を使って避けることができます。 – fajran

+0

コマンドでパイプを使うには' shell = True'が必要ですが、2番目の 'grep'は最初の' grep'コマンドをフィルタ処理されたプロセスリスト。しかし、この両方の場合、パイプと 'grep'はこの場合余計です。 – lunaryorn

4

commandsは推奨されていません。使用しないでください。使用subprocess代わり

import subprocess 
a = subprocess.check_output('ps -ef | grep rtptransmit | grep -v grep', shell=True) 
+2

-1は 'grep'と' shell = True'の無駄使いです。 – lunaryorn

+0

@lunaryorn:質問はPythonでそのコマンドを実行する方法であり、Pythonでそれをgrepする方法ではありません。 – vartec

+0

実際には、 'ps'出力の切り捨てを避ける方法が問題です。しかし、それは私の意見と矛盾しません。 – lunaryorn

関連する問題