Как скопировать переменную bool в Python? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь передать входной аргумент в качестве переменной для скрипта Python. В начале все хорошо, и я получаю переменную в методе main. Однако переменная всегда меняется на «False» при попытке использовать ее в других функциях (не в основной функции). Как сделать копию логической входной переменной, чтобы значение сохранялось по всему сценарию?

Вот мой код:

import sys
import json
import os
import argparse
import logging
import datetime
import time
from csv import DictReader

EXECUTION_MODE_FORCE_UPDATE = False

def main():
    start_time = time.time()
    parser = argparse.ArgumentParser(description='Process some value.')
    parser.add_argument('--input_file', required=True, help="input file (csv)")
    parser.add_argument('--force_update', required=True, help="Choose if you want to use the execution-mode = FORCE UPDATE or not. Takes values: True or False")
    args = parser.parse_args()

    EXECUTION_MODE_FORCE_UPDATE = args.force_update
    if EXECUTION_MODE_FORCE_UPDATE.lower() == 'true':
         EXECUTION_MODE_FORCE_UPDATE = True
    elif EXECUTION_MODE_FORCE_UPDATE.lower() == 'false': 
         EXECUTION_MODE_FORCE_UPDATE = False
    print('EXEC: ', EXECUTION_MODE_FORCE_UPDATE)
    input_file = '/home/blablabla/' + args.input_file 
    update_input(input_file, EXECUTION_MODE_FORCE_UPDATE)
    end_time = (time.time() - start_time)/60
    print('Script total execution time: {} min'.format(end_time))

def update_input(file_path, EXEC_MODE):
    EXECUTION_MODE_FORCE_UPDATE = EXEC_MODE
    print('EXECMODE2: ', EXECUTION_MODE_FORCE_UPDATE)
    nextMethod(param1, param2)

def nextMethod(param1, param2):
    if not EXECUTION_MODE_FORCE_UPDATE:
        print('EXEC_MODE False: ', EXECUTION_MODE_FORCE_UPDATE)
    if EXECUTION_MODE_FORCE_UPDATE:
        print('EXEC_MODE True: ', EXECUTION_MODE_FORCE_UPDATE)

Теперь при выполнении моего скрипта используйте:

python /home/blablabla/myScript.py --input_file testInput.csv --force_update True

При печати логического значения, указанного в качестве входного значения EXECUTION_MODE_FORCE_UPDATE в функциях main () или update_input (), я получаю значение True, что правильно! Но когда я печатаю это в функции nextMethod (), я получаю False. На самом деле это упрощенный пример, у меня есть много других функций между ними, пока я не приду к последней функции, где мне нужна переменная bool. Таким образом, передача этой переменной bool всем функциям в пути является довольно грязной. Как сохранить его как (глобальную?) Переменную и использовать его позже в функции, где мне нужно в конце сценария элегантным способом?

...