通过python脚本安装.rpm或.msi文件

通过python脚本安装.rpm或.msi文件,python,python-2.7,amazon-web-services,amazon-s3,rpm,Python,Python 2.7,Amazon Web Services,Amazon S3,Rpm,我是python的新手。我有一个python脚本从S3 bucket下载rpm文件 import platform import boto3 import botocore BUCKET_NAME = 'tempdownload' KEY = 'temp.rpm' # packaged using golang platformName = platform.system() s3 = boto3.resource('s3') print(platformName) if platfor

我是python的新手。我有一个python脚本从S3 bucket下载rpm文件

import platform
import boto3
import botocore

BUCKET_NAME = 'tempdownload'
KEY = 'temp.rpm' # packaged using golang

platformName = platform.system()
s3 = boto3.resource('s3')

print(platformName)

if platformName == 'Linux':
    try:
        bucket = s3.Bucket(BUCKET_NAME)
        bucket.download_file(KEY, 'temp.rpm')
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "404":
            print("The object does not exist.")
        else:
            raise
else:
    print("not valid operating system")
我想在同一个文件中添加一个脚本,以安装下载的rpm文件或msi windows软件包。我试着在网上搜索,但没有得到任何信息。如果有人能提供一些建议,我将不胜感激


谢谢

您必须调用系统命令-
rpm-Ivh yourpackage.rpm

import subprocess
package_path = '/home/mypackage.rpm'
command = ['rpm', '-Ivh', package_path]
p = subprocess.Popen(command)
p.wait()
if p.returncode == 0:
    print("OK")
else:
    print("Something went wrong")

您可以使用rpm绑定直接从Python安装它。见:


但是,您不应该直接调用rpm,而应该调用Yum或DNF或其python绑定;子进程。检查_调用(['rpm','-U',FILENAME])。如果bucket是公共的,您可以直接将http URL指定给RPM,而无需手动下载。谢谢@szymon!我会试试看。我想知道如果它是windows msi软件包,我们如何安装?您只需要将该命令替换为
['msiexec','/I',package_path',quiet',qn'
我在回答中给出的完全相同的脚本中看到这个错误:执行命令“['/bin/rpm','-ivh','/opt/starter/app_dist/filename.noarch.rpm']”rpm:--ivh:未知选项出了问题