Как передать argparse args в скрипт python, который был импортирован - PullRequest
1 голос
/ 25 января 2020

Скажите, что у меня есть сценарий python, который может принимать аргументы

# testt.py
import argparse

def main(args):

    print(args.foo)
    print(args.bar)
    print(args.nee)

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Test argument parser')

    parser.add_argument('-foo', type=str)
    parser.add_argument('-bar', type=int)
    parser.add_argument('-nee', type=bool)
    args = parser.parse_args()

    main(args)

Но вместо того, чтобы запускать его из командной строки, я хочу запустить его из другой Python программы

import testt

Как мне передать параметры arg?

Ответы [ 2 ]

3 голосов
/ 25 января 2020

Вы можете написать класс для аргументов:

import testt

class TesttArgs:
    def __init__(self, foo, bar, nee):
        self.foo = foo
        self.bar = bar
        self.nee = nee

testt.main(TesttArgs('foo', 2, False))
1 голос
/ 25 января 2020

Вы можете изменить функцию main () в testt.py для выполнения анализа:

# testt.py
import sys
import argparse

def main(args):

    parser = argparse.ArgumentParser(description='Test argument parser')

    parser.add_argument('-foo', type=str)
    parser.add_argument('-bar', type=int)
    parser.add_argument('-nee', type=lambda x: bool(int(x)))
    args = parser.parse_args(args)

    print(args.foo)
    print(args.bar)
    print(args.nee)

if __name__ == "__main__":

    main(sys.argv[1:])

Затем передать sys.argv [1:] в testt.main () из любой программы, импортирующей testt :

# imp.py
import sys
import testt

if __name__ == "__main__":

    testt.main(sys.argv[1:])

Одним из преимуществ является то, что вам больше не нужно поддерживать отдельный класс, когда / если вы изменяете аргументы командной строки, которые хотите поддерживать.

Это dr aws сильно от: Как использовать python argparse с аргументами, отличными от sys.argv?

...