python
  • parameter-passing
  • argparse
  • 2017-09-26 124 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

    相關問題