Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查是否安装了程序列表中的程序_Python_Bash_Python 2.7 - Fatal编程技术网

Python 检查是否安装了程序列表中的程序

Python 检查是否安装了程序列表中的程序,python,bash,python-2.7,Python,Bash,Python 2.7,在Ubuntu 16.04和Python 2.7.12上运行。 我想检查一下,机器上是否安装了程序列表。 到目前为止,我还没有这段代码: import subprocess program = ['rsync', 'locate'] for x in program: cmd = "dpkg-query -W " + x + " | grep -c " + x process = subprocess.Popen(cmd.split(), stdout=subprocess.P

在Ubuntu 16.04和Python 2.7.12上运行。 我想检查一下,机器上是否安装了程序列表。 到目前为止,我还没有这段代码:

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)。谢谢

我建议使用pythons
apt
。它们具有您当前似乎需要的所有功能。我目前没有时间提供示例-如果需要,我将稍后提供。

您可以使用命令-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

要使用此解决方案,您的CMD(列表中)必须在shell中可执行。

是的,我以前使用过apt,但我发现它有点太慢,需要几秒钟才能获取apt.cache。因此,我希望避免使用apt模块。还有一件事,apt模块在默认情况下没有安装,至少在Ubuntu中没有,所以我必须在使用它之前安装它。我希望做这件事尽可能简单快捷。谢谢你的建议是的,非常好用,谢谢!我只需更改Python2.7的print命令语法(print“I've got”+cmd)