在传递 argparse 列表时导入 python 模块
import python module while passing argparse list
我有一个名为 mymodule.py
的脚本,它使用了 argparse。我希望能够编写一个脚本 fakemicro.py
,它将能够从 mymodule.py
导入主模块并将参数传递给它。
我的代码基于 Brian 在这里的回答:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/ and the accepted answer here: 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
任何帮助将不胜感激。谢谢!
我明白了。
我没有将 args
参数传递给 parsed_args = parser.parse_args()
。因此,解析器对象使用 sys.argv[1:]
作为其来源,而不是任何作为参数传递的内容。
将该行更改为 parsed_args = parser.parse_args(args)
解决了问题。
我有一个名为 mymodule.py
的脚本,它使用了 argparse。我希望能够编写一个脚本 fakemicro.py
,它将能够从 mymodule.py
导入主模块并将参数传递给它。
我的代码基于 Brian 在这里的回答:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/ and the accepted answer here: 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
任何帮助将不胜感激。谢谢!
我明白了。
我没有将 args
参数传递给 parsed_args = parser.parse_args()
。因此,解析器对象使用 sys.argv[1:]
作为其来源,而不是任何作为参数传递的内容。
将该行更改为 parsed_args = parser.parse_args(args)
解决了问题。