2016-10-30 20 views
1

Python 2.7.12でUbuntu 16.04で動作しています。 プログラムのリストがマシンにインストールされているかどうか確認したいと思います。 これまでのところ、私はこのコードの動作していない部分を持っている:私は、文字列変数などのプログラムを使用していない場合、私は、このコマンドを実行することができますプログラムのリストからプログラムがインストールされているかどうか確認してください。

import subprocess 

program = ['rsync', 'locate'] 
    for x in program: 
    cmd = "dpkg-query -W " + x + " | grep -c " + x 
    process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) 
    output, error = process.communicate() 

exists = subprocess.call("dpkg-query -W rsync | grep -c 'rsync'", shell=True) 

、それは0/1を返します。 。プログラムがインストールされているかどうかを返すループを構築する方法を教えてください。おそらく5行ほどで、必要なのは単純なTrue/False(0/1)です。ありがとう

答えて

0

私はpythons aptlibraryを使用することをお勧めします。彼らはあなたが現在必要と思われるすべての機能を持っています。私は現在サンプルを提供する時間がありません - 必要ならば後でそれを行います。

あなたが使用するためのシェルでは、このソリューションの実行可能でなければなりません(リストに) コマンド-v

import subprocess 

list_cmd = ['rsync', 'locate', 'celery'] 

for cmd in list_cmd: 
    exist = subprocess.call('command -v '+ cmd + '>> /dev/null', shell=True) 
    if exist == 0: 
     print "I've got " + cmd 

あなたのCMDSを使用することができます

+0

はい、以前はaptを使用していましたが、少し遅いと感じました。これはapt.cacheを取得するのに数秒かかります。したがって私はaptモジュールの使用を避けたい。もう1つ、aptモジュールは、少なくともUbuntuではなく、デフォルトでインストールされているので、使用する前にインストールする必要があります。私はできるだけ簡単かつ迅速にそれをするつもりです。 –

3

+0

うん、それは完璧に、おかげで動作しますが、提案ありがとう!私はPython 2.7(print "I've got" + cmd)の印刷コマンド構文を変更する必要がありました –

+0

ああ、ok、編集;) – Anton

関連する問題