【问题标题】:How to pass argparse args to python script that was imported如何将 argparse args 传递给导入的 python 脚本
【发布时间】:2020-05-11 07:52:39
【问题描述】:

假设我有一个可以接受 args 的 python 脚本

# testt.py
import argparse

def main(args):

    print(args.foo)
    print(args.bar)
    print(args.nee)

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Test argument parser')

    parser.add_argument('-foo', type=str)
    parser.add_argument('-bar', type=int)
    parser.add_argument('-nee', type=bool)
    args = parser.parse_args()

    main(args)

但是我不想从命令行运行它,而是想从另一个 Python 程序运行它

import testt

如何传入 arg 参数?

【问题讨论】:

  • 您的def main():main(args) 冲突。下定决心。 args 应该是函数参数还是全局模块?
  • 抱歉,刚刚固定为def main(args)
  • 具有这 3 个属性的任何对象都将用作 testt.main(foo) 参数。
  • 有时定义main(foo, bar, nee) 更简洁。然后你可以在不创建具有属性的对象的情况下传递值。

标签: python argparse


【解决方案1】:

您可以为参数编写一个类:

import testt

class TesttArgs:
    def __init__(self, foo, bar, nee):
        self.foo = foo
        self.bar = bar
        self.nee = nee

testt.main(TesttArgs('foo', 2, False))

【讨论】:

    【解决方案2】:

    您可以更改 testt.py 中的 main() 函数来进行解析:

    # testt.py
    import sys
    import argparse
    
    def main(args):
    
        parser = argparse.ArgumentParser(description='Test argument parser')
    
        parser.add_argument('-foo', type=str)
        parser.add_argument('-bar', type=int)
        parser.add_argument('-nee', type=lambda x: bool(int(x)))
        args = parser.parse_args(args)
    
        print(args.foo)
        print(args.bar)
        print(args.nee)
    
    if __name__ == "__main__":
    
        main(sys.argv[1:])
    

    然后将 sys.argv[1:] 从任何程序导入 testt 传递给 testt.main():

    # imp.py
    import sys
    import testt
    
    if __name__ == "__main__":
    
        testt.main(sys.argv[1:])
    

    一个优点是当/如果您更改要支持的命令行参数时,您不再需要维护单独的类。

    这主要来自:How to use python argparse with args other than sys.argv?

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 2020-01-11
      • 2018-11-19
      • 1970-01-01
      • 2020-08-09
      • 2014-08-01
      • 2018-09-03
      • 1970-01-01
      • 2019-06-11
      相关资源
      最近更新 更多