我有一个名为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
任何帮助都会非常感激。谢谢!
答案 0 :(得分:1)
我明白了。
我没有将args
参数传递给parsed_args = parser.parse_args()
。因此,解析器对象使用sys.argv[1:]
作为其源,而不是作为args传递的任何内容。
将该行更改为parsed_args = parser.parse_args(args)
解决了问题。