2017-12-09 19 views
0

pythonでサブプロセスを使用してシェルコマンドを実行しているときに出力が間違っています。pythonサブプロセスの出力が切り捨て

Pythonシェルでbashシェル内のgrep(com.vertica.solutions.kafka.Launcher

ps -ef | grep com.vertica.solutions.kafka.Launcher 
root  92300 39024 0 23:06 pts/1 00:00:00 grep --color=auto com.vertica.solutions.kafka.Launcher 
dbadmin 413872 413868 0 22:06 pts/0 00:00:24 java -cp /opt/vertica/packages/kafka/bin/../lib/*:/opt/vertica/java/lib/vertica-jdbc.jar:/opt/vertica/packages/kafka/bin/../config/* -Dlog4j.configurationFile=/opt/vertica/packages/kafka/bin/../config/vkafka-log-config.xml -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector com.vertica.solutions.kafka.Launcher --conf /home/dbadmin/live.conf 

のgrep(com.vertica.solutions.kafka.Launcher

>>> cmd = "ps aux |grep com.vertica.solutions.kafka.Launcher| grep -v grep" 
>>> check_output(cmd,shell=True).strip() 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib64/python2.7/subprocess.py", line 575, in check_output 
raise CalledProcessError(retcode, cmd, output=output) 
subprocess.CalledProcessError: Command 'ps aux |grep com.vertica.solutions.kafka.Launcher| grep -v grep' returned non-zero exit status 1 

これは、サブプロセスがps出力を切り捨てるためです。私が単語kafkaでgrepするとき、私は結果を得るが、望ましくない。

はgrepだけカフカ

>>> cmd = "ps aux | grep kafka | grep -v grep" 
>>> check_output(cmd,shell=True).strip() 
dbadmin 413868 0.0 0.0 113128 1372 pts/0 S 22:06 0:00 /bin/bash /opt/vertica/packages/kafka/bin/vkconfig launch --conf /home/dbadmin/live.conf\n 
dbadmin 413872 0.6 1.0 7403000 175544 pts/0 Sl 22:06 0:25 java -cp /opt/vertica/packages/kafka/bin/../lib/*:/opt/vertica/java/lib/vertica-jdbc.jar:/opt/vertica/package' 

私はワードカフカでgrepし、私は、プロセスを取得する(PID 413872)が、PythonでシェルproceのCOMMAND列の出力ssコマンドが不完全です。

+0

それは、 – user1767754

+0

CMD =が何かを切り捨てていません。 –

答えて

0

サブプロセスがtruncatingではないstdoutに書き込まれたものは、あなたのpythonセッションにパイプされます。 -vが正常に実行されないため、不正な戻りコード(None Zero)で終了します。 grepのではなく、エラーを返すので、成功しなかった場合には、

import os 
from subprocess import Popen 

DEVNULL = open(os.devnull, 'wb') 
cmd = 'ps aux |grep com.vertica.solutions.kafka.Launcher| grep -v grep' 
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=DEVNULL, shell=True) 
print process.communicate()[0] #output 

ことを確認します:あなたは次の操作を行うことができますグレップから任意の出力を得ることはありません例を無視する

コード、それはちょうどそれをダンプします。私は正しい結果を得たWWフラグを使用することにより、 "awkの '{$ 2印刷}' のPS auxww | grepをcom.vertica.solutions.kafka.Launcher | |はgrep -v grepの"

関連する問題