如何从带有参数的命令提示符下执行python?

时间:2019-05-04 22:58:16

标签: python

我创建了一个python程序,请参见下文。它将文件移动到AWS S3。它正在期待输入。它可以很好地与pycharm一起使用,但是当我从命令提示符下调用python脚本时,它不会使用输入值。这是我的代码:


import os
import sys
import boto3
from botocore.client import Config
import configparser
import re
import os.path

## Initialize the Parameters
def initconfig(input):

    config = configparser.ConfigParser()
    config.read_file(open( 'CONFIG_AIRBILLING.conf'))
    print('Code Name is :'+ input)
    global REMOTE_DIR,ACCESS_KEY_ID,ACCESS_SECRET_KEY,BUCKET_NAME,TARGET_DIR,FILENAME,SRC_DIR,data,File
    ACCESS_KEY_ID = config.get('ACCESS', 'ACCESS_KEY_ID')
    print('ACCESS_ID_IS:'+ ACCESS_KEY_ID)
    ACCESS_SECRET_KEY = config.get('ACCESS', 'ACCESS_SECRET_KEY')
    BUCKET_NAME = config.get('ACCESS', 'BUCKET_NAME')
    SRC_DIR = config.get(input, 'SRC_DIR')
    FILENAME = config.get(input, 'FILENAME')
    #LOC="C:\test\demo.txt"
    TARGET_DIR = config.get(input, 'TARGET_DIR')
    File='demo.txt'
    #data = open(File, 'rb') ## This is the filename, need to change it



## This function will make sure file exist in Source directory
def readstatus():
    try:
        with open(File,'r') as f:
            f.closed
            result='True'
            movefiles(result)
    except (Exception,FileNotFoundError) as e:
        print('***Error:File Not Found or Accessible***')
        result='False*'
        raise e


## This function will move the files to AWS S3 bucket
def movefiles(result):
    if result=='True':
        s3 = boto3.resource(
            's3',
            aws_access_key_id=ACCESS_KEY_ID,
            aws_secret_access_key=ACCESS_SECRET_KEY,
            config=Config(signature_version='s3v4')
        )
        s3.Bucket(BUCKET_NAME).put_object(Key=TARGET_DIR + '/' + File, Body=File)
        print('***File Moved***')


    print("Done")

initconfig("ABC")
readstatus()

上面的代码在pycharm上运行良好,因为我可以更改initconfig函数值的值。但是,当我通过命令提示符运行此命令时,它不会接受我传递的参数值。这是我传递值的方式,请帮助我解决此问题。

从命令提示符

python move_files_to_S3 "TEST"

1 个答案:

答案 0 :(得分:2)

您要使用sys.argv,这是一个包含通过命令行传递的所有参数的列表(但请注意,sys.argv[0]是脚本本身的名称)。

您也最好检查一下__name__ == '__main__',以区分何时通过命令行从python解释器调用代码(如您文章末尾的示例)以及何时导入代码来自另一个模块:

if __name__ == '__main__':
    initconfig(sys.argv[1])
    readstatus()