简体   繁体   中英

How to execute python from command prompt with parameters?

I have created a python program, see below. It moves files to AWS S3. It it is expecting input. It works well with pycharm but when I call the python script from command prompt, it doesn't take the input value. Here is my code:


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()

The code above runs fine with pycharm because I can change the value of initconfig function value. But when I run this through command prompt, it doesn't take the parameter values I pass. Here is how I am passing the value, Please help me to fix this.

From Command Prompt

python move_files_to_S3 "TEST"

You want sys.argv , which is a list with all parameters passed through the command line (but notice sys.argv[0] is the name of the script itself).

You'd also do good to check for __name__ == '__main__' to distinguish between when your code is called from the python interpreter through the command line (as in your example at the end of your post) and when it is imported from another module:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM