首页 > 解决方案 > 使用 argparse 在代码中的特定点使用函数?

问题描述

如果我尝试在终端中运行 argparse 命令,该函数将首先运行,然后是其余代码。但我想这样做,以便该函数将在代码的最后或代码中的特定点运行。我尝试将所有内容都变成函数,但这导致了其他问题。

filename = 'report_list.csv'

SPREADSHEET_ID = 'spreadsheet id here'
RANGE_NAME = "Baselines!A1:F200"

def Export_Data_To_Sheets():


    store = file.Storage('credentials.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('client_secret.json', scopes)
        creds = tools.run_flow(flow, store)
    service = build('sheets', 'v4', http=creds.authorize(Http()))

    response_date = service.spreadsheets().values().update(
        spreadsheetId=SPREADSHEET_ID,
        valueInputOption='RAW',
        range=RANGE_NAME,
        body=dict(
            majorDimension='ROWS',
            values=df.T.reset_index().T.values.tolist())
    ).execute()
    print('Sheet successfully Updated')

global args

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--file', '-f', type=argparse.FileType('r'))
    parser.add_argument('--name', '-n')
    parser_sheets = parser.add_argument('--sheets', type=Export_Data_To_Sheets(), 
    action="store")
    args = parser.parse_args()

global baseline_dict
if args.file is not None:
    try:
        baseline_dict = json.load(args.file)
        args.file.close()
    except:
        print("JSON Baseline File {}: Unable to LOAD")

if args.name is not None:
    with open(args.name) as f:
        #print(json.load(f))
        #baseline_dict = f
        try:
            baseline_dict = json.load(f)
        except:
            print("JSON Baseline File {}: Unable to LOAD")

results_dict = baseline_dict["results"]
#Turns the new dictionary into a dataframe
df = pd.DataFrame(results_dict)

#Establishes first column and then individually makes the other columns
df.columns = ['hashed_secret']
df['is_verified'] = ''
df['line_number'] = ''
df['type'] = ''
#Breaks up Dictionary to appropriate columns
df = df['hashed_secret'].apply(pd.Series)

#Drops extra rows with same secret
df.drop_duplicates(subset='hashed_secret', keep='first', inplace=True)

我还尝试将“if name == ' main ':”语句放在代码末尾。然后尝试将其余代码(如果 args.file 不是 None :) 放在函数之前。这将返回这个。我什至尝试将 args 设为全局变量。

Traceback (most recent call last):
File "./Json_DetectSecrets.py", line 22, in <module>
if args.file is not None:
NameError: name 'args' is not defined

标签: pythonfunctionargparse

解决方案


推荐阅读