2016-07-11 34 views
0

サービスがインストールされている場合、Pythonスクリプトで確認する方法を探しています。例えば、私はインストール/実行中/ダウンコマンドラインで、私が使用してSSHサーバよりも、チェックしたい場合:サービスがインストールされているかどうかを確認する方法

sshd.service 
    Loaded: not-found (Reason: No such file or directory) 
    Active: inactive (dead) 
:サービスがインストールされていない場合

service sshd status 

、私はこのようなメッセージを持っています

私はこの3行を取得するためにサブプロセスcheck_outputを使用しましたが、pythonスクリプトは機能しません。私は出力を得るためにシェル=真のを使用しましたが、それは動作しません。サービスがインストールされているか、別の方法が既存ではるかに効率的かどうかを見つけるのは適切なソリューションですか?

私のPythonスクリプトがあります:

import subprocess 
from shlex import split 

output = subprocess.check_output(split("service sshd status"), shell=True) 

if "Loaded: not-found" in output: 
    print "SSH server not installed" 

このコードのproblemeはsubprocess.CalledProcessErrorです:コマンドがゼロ以外の終了ステータス1を返し、私は、コマンドラインにはない何かを返したときにそれは知っています存在しますが、シェルにコマンドを書くときに結果が必要です

答えて

0

だけでエラーをキャッチし、shell=Trueを避ける:

import subprocess 

try: 
    output = subprocess.check_output(["service", "sshd", "status"], stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as e: 
    print(e.output) 
    print(e.returncode) 
+0

プログラムは私に次のように言っていました:コマンド '[' service '、' shd '、' status ']'はゼロ以外の終了ステータスを返す3.シェルコマンドと同じ行ではなく、インストールされているかどうかは –

+0

'shd'または' sshd'ですか? –

+0

間違い、申し訳ありませんが、コード内にsshdがあります –

0

systemctlコールを選択してください。これは既存のサービスと存在しないサービスとで異なります。サービスが存在し、1ない場合たとえば

systemctl cat sshd 

は終了コード0を返します。そしてそれはチェックするのが簡単なはずですね。

+0

サービスを停止しても、私は私のスクリプトを適応させる必要があるが、それは働いています。ありがとうございます!! –

関連する問題