传递argparse列表

时间:2017-06-30 14:49:06

标签: python-2.7 argparse

我有一个名为mymodule.py的脚本,它使用argparse。我希望能够编写一个脚本fakemicro.py,它将能够从mymodule.py导入主模块并将参数传递给它。 我的代码基于Brian的答案:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/以及此处接受的答案:In Python, can I call the main() of an imported module?

我一直遇到意想不到的错误,所以我希望你能提供帮助。

以下是mymodule.py

的内容
#!/usr/bin/env python
import argparse
import sys
def parse_args(args):
    parser = argparse.ArgumentParser(
        description='yeah'
    )
    parser.add_argument(
        '-i', nargs='+',
        help='full path of input directory', required=True
    )
    parser.add_argument(
        '-o', '-output',
        help='full path of output directory', required=True
    )
    parsed_args = parser.parse_args()
    return parsed_args


def main(args):
    args = parse_args(args)
    print args.i
    print args.o
if __name__ == '__main__':
    main(sys.argv[1:])

这里是fakemicro.py

#!/usr/bin/env python

import mymodule
import sys
mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]])

我原以为这会像打字一样起作用: 命令行中mymodule.py -i path/to/1 -o path/to/2 但是我的剧本破了。

$ fakemicro.py path/to/2 path/to/3
usage: fakemicro.py [-h] -i I [I ...] -o O
fakemicro.py: error: argument -i is required

我认为mymodule.py会看到我通过了-i arg1 -o arg2 mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]])

这是mymodule.py在命令行上单独运行时的输出:

$ mymodule.py -i 1 -o 2
['1']
2

任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我明白了。 我没有将args参数传递给parsed_args = parser.parse_args()。因此,解析器对象使用sys.argv[1:]作为其源,而不是作为args传递的任何内容。 将该行更改为parsed_args = parser.parse_args(args)解决了问题。