【问题标题】:install .rpm or .msi file through python script通过 python 脚本安装 .rpm 或 .msi 文件
【发布时间】:2018-09-04 04:52:25
【问题描述】:

我是 python 的新手。我有一个 python 脚本可以从 S3 存储桶下载一个 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 文件或 windows 的 msi 包。我尝试在网上搜索,但没有得到任何信息。如果有人提供一些指示,将不胜感激。

谢谢!

【问题讨论】:

  • import subprocess; subprocess.check_call(['rpm', '-U', FILENAME])。如果存储桶是公共的,您可以直接将 http URL 指定给 RPM,而无需手动下载。

标签: python python-2.7 amazon-web-services amazon-s3 rpm


【解决方案1】:

您可以使用 rpm 绑定直接从 Python 安装它。见:https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch16s06.html

但是,您不应该直接调用 rpm,而应该调用 Yum 或 DNF 或其 python 绑定。

【讨论】:

    【解决方案2】:

    你必须调用系统命令 - 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")
    

    【讨论】:

    • 谢谢@szymon!我会试试看。我想知道如果它是一个 windows msi 包我们如何安装?
    • 你只需要将命令替换为['msiexec', '/i', package_path, 'quiet', 'qn'
    • 我看到这个错误与答案中给出的完全相同的脚本:执行命令“['/bin/rpm', '--ivh', '/opt/starter/app_dist/filename.noarch。 rpm']" rpm: --ivh : unknown option 出了问题
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2013-01-09
    • 1970-01-01
    • 2011-12-25
    • 2012-08-28
    • 2015-05-20
    相关资源
    最近更新 更多