你好我正在使用以下代码通过 yum api 安装包,使用 pythongs cript 我需要基于此代码构建一些安装,现在它已安装但我收到一些错误
#!/usr/bin/python
import sys
import platform
import urllib2, urllib
import re
import yum
package="ntp"
print ("Installing ntp")
print ("#################")
yb=yum.YumBase()
searchlist=['name']
arg=['ntp']
matches = yb.searchGenerator(searchlist,arg)
for (package, matched_value) in matches :
if package.name == 'ntp' : yb.install(package)
yb.buildTransaction()
yb.processTransaction()
安装完成后出现错误
Running rpm_check_debug
Traceback (most recent call last):
File "./test.py", line 29, in <module>
yb.processTransaction()
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 4928, in processTransaction
self._doTestTransaction(callback,display=rpmTestDisplay)
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 5027, in _doTestTransaction
raise Errors.YumTestTransactionError, errstring
yum.Errors.YumTestTransactionError: Test Transaction Errors: package ntp is already installed
即使我删除了 ntp 并再次运行脚本,它也会在完成安装后给我这个错误消息
另外我想调整安装过程,检查包是否已经安装然后打印它已经安装并处理到代码中的下一步,否则处理安装步骤, 对于使用 yum api 以正确方式进行 if 条件的任何提示
请您参考如下方法:
您好,之前的答案无效,正确的答案如下:
import yum
yb=yum.YumBase()
inst = yb.rpmdb.returnPackages()
installed=[x.name for x in inst]
packages=['bla1', 'bla2', 'bla3']
for package in packages:
if package in installed:
print('{0} is already installed'.format(package))
else:
print('Installing {0}'.format(package))
kwarg = {
'name':package
}
yb.install(**kwarg)
yb.resolveDeps()
yb.buildTransaction()
yb.processTransaction()
