我需要它来快速安装 memcached,作为设置测试服务器的 Fabric 脚本的一部分。想我会把它记录在这里以供将来参考。
问问题
1972 次
3 回答
11
将此超级用户评论和此stackoverflow 答案拼凑在一起。(注意:我正在运行root
而不是使用sudo
):
def package_installed(pkg_name):
"""ref: http:superuser.com/questions/427318/#comment490784_427339"""
cmd_f = 'dpkg-query -l "%s" | grep -q ^.i'
cmd = cmd_f % (pkg_name)
with settings(warn_only=True):
result = run(cmd)
return result.succeeded
def yes_install(pkg_name):
"""ref: https://stackoverflow.com/a/10439058/1093087"""
run('apt-get --force-yes --yes install %s' % (pkg_name))
def make_sure_memcached_is_installed_and_running():
if not package_installed('memcached'):
yes_install('memcached')
with settings(warn_only=True):
run('/etc/init.d/memcached restart', pty=False)
于 2013-02-15T22:38:13.840 回答
1
Fabtools是一个非常有用的 Python 模块,我将它添加到我所有的 Fabric 项目中。
它有一个方法deb.is_installed来检查是否安装了 Debian 软件包。很高兴在我的所有项目中使用这种标准方法,并且 Fabtools 还提供了一些其他有用的包管理助手,您可能会喜欢。
于 2017-03-27T19:29:01.597 回答
0
至于检查是否安装了软件包(在本地运行以进行测试)
import re
def is_package_installed(pkgname):
output = local('dpkg -s {}'.format(pkgname), capture=True)
match = re.search(r'Status: (\w+.)*', output)
if match and 'installed' in match.group(0).lower():
return True
return False
于 2016-07-04T23:40:51.833 回答