我有一个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
。
这样做的最佳方式是什么?
答案 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
)不关心您所在的文件。