【问题标题】:How to pass parameters to python function using argparse?如何使用argparse将参数传递给python函数?
【发布时间】:2018-03-07 05:09:20
【问题描述】:

我有一个 foo.py 使用 argparse 来获取 main() 函数的命令行参数。

""" 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()

【问题讨论】:

  • 您是否试图将参数从foo.py 获取到bar.py?为什么不直接将parser 移动到bar.py
  • @Jalepeno112 因为 foo.py 可能是一个单独的模块。

标签: python parameter-passing argparse


【解决方案1】:

您可以修改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')
    args = parser.parse_args(passed_args)

    if args.all:
        pass

if __name__ == '__main__':
    main()

""" bar.py """
import sys
import foo

if __name__ == '__main__':
    foo.main(["-a"])

【讨论】:

  • 你不需要 if 测试。如果passed_args is None parse_args 使用sys.argv[1:]
  • @hpaulj 谢谢,伙计们。
猜你喜欢
  • 2018-10-17
  • 2018-06-27
  • 2013-11-30
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2015-06-27
  • 2016-09-08
  • 2023-01-06
相关资源
最近更新 更多