2017-02-08 14 views
0

次のシェル評価をpython2.6に変換したい(アップグレードできません)。私はコマンドの出力を評価する方法を理解できません。Python、if文のOSコマンドの評価出力

ここでシェルバージョンです:

status=`$hastatus -sum |grep $hostname |grep Grp| awk '{print $6}'` 
if [ $status != "ONLINE" ]; then 
    exit 1 
fi 

は、[ 'ONLINEの\ nの']私はos.popenを試してみましたが、それが返されます。

value = os.popen("hastatus -sum |grep `hostname` |grep Grp| awk '{print $6}'".readlines() 
print value 
+0

そう...それは同じです:

次にあなたが最初のアプローチを使用していると仮定すると、あなただけ使用することができ、出力をテストするには? –

+0

シェルのバージョンは単に "ONLINE"を返し、os.popenは "['ONLINE \ n']"を返します。それは問題ありませんが、 "ONLINE"が値にある場合に "ONLINE" – user3931296

+0

'に対してそれをテストする方法はわかりません。 ' – fedepad

答えて

0

subprocessモジュールを試してみてください。

import subprocess 
value = subprocess.call("hastatus -sum |grep `hostname` |grep Grp| awk '{print $6}'") 
print(value) 

ドキュメントはここに発見された: https://docs.python.org/2.6/library/subprocess.html?highlight=subprocess#module-subprocess

+0

ありがとうございますが、パイプが無視されるようです。ドキュメントにはコマンドと引数が表示されています(["command"、 "args"])同等のパイプが見つかりません。 – user3931296

+0

シェルコマンドをシェルスクリプトでラップすることができます。それは簡単に呼び出し可能です。あなたがやろうとしていることを敗北させることは確かではありません。 –

0

推奨方法はsubprocessモジュールを使用することです。
ドキュメントの以下のセクションでは、有益である:
replacing shell pipeline
私は参考のためにここに報告:= dmesg | grep hda

出力は次のようになります。

p1 = Popen(["dmesg"], stdout=PIPE)

開始後

p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

p1.stdout.close()コールはp1p1SIGPIPEp2かの終了を受信するために重要です。

また、信頼された入力のために、シェル自身のパイプラインサポートはまだ直接使用することができる:= dmesg | grep hda

出力は次のようになります。

output=check_output("dmesg | grep hda", shell=True)

そして、ここではos.popを翻訳するレシピサブプロセスモジュールへのエン:上記のマニュアルに示したよう
replacing os.popen()

だからあなたの場合には、あなたはPopensを連結

import subprocess 

output=check_output("hastatus -sum |grep `hostname` |grep Grp| awk '{print $6}'", shell=True) 

または

ような何かを行うことができます(おそらく私が何をするのか) 。

import sys 
import subprocess 

.... 
if 'ONLINE' in output: 
    sys.exit(1) 
+0

助けてくれてありがとう。今のところシェルでそれをやるほうが簡単です。 – user3931296

関連する問題