如何将argparse args传递给导入的python脚本

2024-04-18 14:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个可以接受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参数


Tags: pyimport脚本addparserfoomaintype
2条回答

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

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

您可以更改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.main(),从任何程序导入testt:

# 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?

相关问题 更多 >