使用 argparse 将 Shell 参数传递给 Boto3 Python

Posted

技术标签:

【中文标题】使用 argparse 将 Shell 参数传递给 Boto3 Python【英文标题】:Pass Shell Arguments to Boto3 Python with argparse 【发布时间】:2018-10-17 18:49:57 【问题描述】:

我正在尝试将 shell 参数传递给 python 脚本,但我还需要能够附加 argparse 中的内容。

shell命令将是

python script.py $arg1 $arg2

script.py 是

#!/usr/bin/python

import sys
import boto3

s3 = boto3.resource('s3')
s3.Bucket('my-bucket').upload_file(print 'sys.argv[1]', print 'sys.argv[2]')

编辑

在某些情况下,$arg 需要添加文件类型或目录。

【问题讨论】:

请澄清“需要能够附加 argparse 中的内容” upload_file(sys.argv[1], sys.argv[2])? @wim 一些参数需要添加文件类型、目录或其他信息。我不确定什么时候会加入通话。 我开始回答这个问题,但实际上您对 python 工作原理的基础知识感到困惑,我不知道从哪里开始。我建议你复习一门关于python的基础课程,例如learnpython.org 【参考方案1】:

您可以使用 argparse 将 Shell 参数传递给 Boto3 Python,如下所示

import argparse
import boto3
import botocore
import os
import pandas as pd
from boto3.s3.transfer import TransferConfig

def environment_set(access_key,secret_access_key):
    os.environ["AWS_ACCESS_KEY_ID"] = access_key
    os.environ["AWS_SECRET_ACCESS_KEY"] = secret_access_key

def s3_upload_file(args):     
    while True:
    try:
        s3 = boto3.resource('s3')

        GB = 1024 ** 3

            # Ensure that multipart uploads only happen if the size of a transfer
            # is larger than S3's size limit for nonmultipart uploads, which is 5 GB.
            config = TransferConfig(multipart_threshold=5 * GB)

        s3.meta.client.upload_file(args.path, args.bucket, os.path.basename(args.path),Config=config)
        print "S3 Uploading successful"
        break
    except botocore.exceptions.EndpointConnectionError:
        print "Network Error: Please Check your Internet Connection"
    except Exception, e:
        print e


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='UPLOAD A FILE TO PRE-EXISTING S3 BUCKET')
    parser.add_argument('path', metavar='PATH', type=str,
            help='Enter the Path to file to be uploaded to s3')
    parser.add_argument('bucket', metavar='BUCKET_NAME', type=str,
            help='Enter the name of the bucket to which file has to be uploaded')
    parser.add_argument('cred', metavar='CREDENTIALS', type=str,
            help='Enter the Path to credentials.csv, having AWS access key and secret access key')    
    args = parser.parse_args()
    df = pd.read_csv(args.cred, header=None)
    access_key = df.iloc[1,1]
    secret_access_key = df.iloc[1,2]
    environment_set(access_key,secret_access_key)
    s3_upload_file(args)

当涉及到追加时,基本的 python 应该可以帮助你!

【讨论】:

以上是关于使用 argparse 将 Shell 参数传递给 Boto3 Python的主要内容,如果未能解决你的问题,请参考以下文章

如何将 argparse 参数传递给类

从 subprocess.Popen 将参数传递给 argparse

将参数传递给 Docker 容器中的 Python argparse

将参数传递给shell脚本中包含的Python脚本

使用 argparse 将参数发送到 Python 脚本中的函数

如何将参数传递给 shell 脚本? [复制]