конфликт argparse при использовании с двумя связанными скриптами python3 - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь запустить один скрипт Python (Main_Script), который должен получить флаг argparse, и этот скрипт одновременно вызывает другой скрипт (Sub_Script), который также должен получить флаг для ввода.И когда я вызываю Main_Script, я получаю сообщение об ошибке, в котором говорится, что я не могу использовать флаг, потому что он не определен в сценарии, но на самом деле он определен.Уведомление об ошибке заставляет меня использовать флаг из нижнего индекса вместо этого.

MAIN_SCRIPT

parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-p', '--print_positive_results', action='store_true')
args = parser.parse_args()

PRINT_POSITIVE = args.print_positive_results
#I then use rhi global variable PRINT_POSITIVE 

SUB_SCRIPT

import argparse
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-d', '--debug', action='store_true')
args = parser.parse_args()

И когда я звоню python MAIN_SCRIPT.py -p, я получаю это

usage: test_grammar.py [-h] [-d]
test_grammar.py: error: unrecognized arguments: -p

DEBUG = False
if (args.debug ):
    DEBUG = True

1 Ответ

0 голосов
/ 24 апреля 2019

Похоже, что аргументы командной строки из основного сценария передаются в дополнительный сценарий.

Вы можете попытаться (и, вероятно, должны) обернуть содержимое argparse в:

if __name__ == '__main__':
    <argparse stuff>

При этом код вызывается только тогда, когда скрипт вызывается из командной строки.Реальный код может быть передан в функцию.Таким образом, вы можете использовать скрипт из командной строки с argparse и импортировать функцию из скрипта, только если вы вызываете ее из другого скрипта:

Основной скрипт:

import argparse
import subscript

if __name__ == '__main__':
    parser = argparse.ArgumentParser(add_help=True)
    parser.add_argument('-p', '--print_positive_results', action='store_true')
    args = parser.parse_args()

    ...
    subscript.your_function(<whatever your args are>)
    ...

Под скрипт:

import argparse


def your_function(<your args>):
    <your code>


if __name__ == '__main__':
    parser = argparse.ArgumentParser(add_help=True)
    parser.add_argument('-d', '--debug', action='store_true')
    args = parser.parse_args()

    your_function(<whatever your args are>)
    ...
...