将python脚本的所有参数传播到函数的最佳方法

时间:2016-10-25 03:34:12

标签: python arguments parameter-passing argparse

我有一个python脚本script_A,在main中,它在另一个文件中调用另一个python函数。

script_A将被调用如下:

script_A --option1 "foo" --option2 "hoo"

内部script_A我有:

if __name__ == "__main__":
   # call another function `func_B` defined in a different file

我想传递script_A中传递给func_B的所有参数而不实际解析参数。

即。我想在argparse内使用func_B

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

使用内置模块sys获取参数列表。然后做你想做的事。

import sys

print(sys.argv)

答案 1 :(得分:0)

请记住,只要您的脚本运行,您就会在列表(sys.argv)中将您的参数拆分为空格(第一项是脚本的名称),所以你'不会在本身获得初始字符串。

然而,考虑到这一点,你可以这样做:

__main__放在这样的文件中:

mod1.py

import sys
from mod2 import foo


if __name__ == "__main__":
    foo(sys.argv[1:]) # To remove the script's name, which is always the first argument

然后在另一个模块(在本例中我调用mod2.py)中运行argparser,如下所示:

mod2.py

import argparse


def make_parser():
    parser = argparse.ArgumentParser(description='Process some foos.')
    parser.add_argument('--foo', type=str, nargs='+', help='a foo',)
    parser.add_argument('--baz', type=str, help='a baz')
    return parser


def foo(args):
    parser = make_parser()
    parsed_args = parser.parse_args(args)
    print "Got me some foos: %s" % (parsed_args.foo)
    print "And a baz: %s" % (parsed_args.baz)

运行$ python ./mod1.py --foo bar1 bar2 --baz 1会导致:

$ python ./mod1.py --foo bar1 bar2 --baz 1
Got me some foos: ['bar1', 'bar2']
And a baz: 1

答案 2 :(得分:0)

只需在argparse中使用func_B,就像使用script_A时一样。它会工作正常。命令行参数和命令行参数解析工具(如argparse)不关心您所在的文件。