python
  • parameter-passing
  • argparse
  • 2017-09-26 63 views 1 likes 
    1

    我有一个foo.py使用argparse来获取main()函数的命令行参数。如何使用argparse将参数传递给python函数?

     
    """ foo.py """ 
    import argparse 
    
    def main(): 
        parser = argparse.ArgumentParser(description='test') 
        parser.add_argument('--all', '-a', action='store_true', help='all') 
        args = parser.parse_args() 
    
        if args.all: 
         pass 
    
    if __name__ == '__main__': 
        main() 
    
    

    而且我必须在另一个Python脚本bar.py上测试这个main()函数。我的问题是如何在bar.py中传递参数。我目前的解决方案是改变sys.argv。寻找更好的解决方案。

     
    """ bar.py """ 
    import sys 
    import foo 
    
    if __name__ == '__main__': 
        sys.argv.append('-a') 
        foo.main() 
    
    
    +0

    你是否试图从'foo.py'将参数变为'bar.py'?为什么不把'parser'移动到'bar.py'? – TheF1rstPancake

    +0

    @ Jalepeno112由于foo.py可能是一个独立的模块。 – northtree

    回答

    2

    您可以修改main函数以接收参数列表。

    """ foo.py """ 
    import argparse 
    
    def main(passed_args=None): 
        parser = argparse.ArgumentParser(description='test') 
        parser.add_argument('--all', '-a', action='store_true', help='all') 
        if passed_args: 
         args = parser.parse_args(passed_args) 
        else: 
         args = parser.parse_args() 
    
        if args.all: 
         pass 
    
    if __name__ == '__main__': 
        main() 
    
    """ bar.py """ 
    import sys 
    import foo 
    
    if __name__ == '__main__': 
        foo.main(["-a"]) 
    
    +0

    你不需要if测试。如果'passed_args是None','parse_args'使用'sys.argv [1:]'。 – hpaulj

    +0

    @hpaulj哦,谢谢。我以前不知道它。 – Sraw

    +0

    @hpaulj谢谢,伙计们。 – northtree

    相关问题