使用 argparser 将参数传递给入口点 python 脚本

Posted

技术标签:

【中文标题】使用 argparser 将参数传递给入口点 python 脚本【英文标题】:Passing arguments to an entry point python script using argparser 【发布时间】:2020-08-17 06:44:48 【问题描述】:

我希望将用户输入的参数从命令行传递到 python 脚本的入口点。到目前为止,我已经尝试使用 argparse 将参数从命令行传递到 test.py 脚本。当我尝试传递参数时,它们无法识别,并且收到以下错误。

load_entry_point('thesaurus==0.1', 'console_scripts', 'thesaurus')() 类型错误:find_synonym() 缺少 1 个必需的位置参数:'argv'

我已经查看了此处的其他示例,但无法让任何解决方案发挥作用。

def main(argv):
    if argv is None:
        argv = sys.argv

    parser = argparse.ArgumentParser(description='Enter string')
    parser.add_argument('string', type=str, help='Enter word or words', nargs='*')
    args = parser.parse_args(argv[1:])
    print(args)

if __name__ == "__main__":
    sys.exit(main(sys.argv))

我的 setup.py 脚本入口点如下所示

setup(entry_points='console_scripts': ['test=test_folder.main:main'])

我期望发生的情况与我运行 python main.py main foo 时类似。当它传递给函数时,它将成功打印出 hello。

【问题讨论】:

如果你使用argparse,你为什么使用sys.argv? @OldWinterton,像这样使用argv 在测试main 时提供了一些灵活性。此脚本在以常规方式调用时运行良好。 【参考方案1】:

所以当我从函数中删除参数时它现在可以工作了。

 def main():          
        parser = argparse.ArgumentParser(description='Enter string')
        parser.add_argument('string', type=str, help='Enter word or words', nargs='*')
        args = parser.parse_args()
        print(args.string)

if __name__ == "__main__":
    main()

我相信它可能适用于第一个示例中使用的 sys.arv,因为我的实际问题是当我使用从 GitHub 重新下载此脚本时。

pip 安装 git+ URL

脚本未更新,因此错误仍然存​​在,这需要删除与 GitHub 存储库相关的所有文件并使用相同的 pip 命令重新安装。

【讨论】:

以上是关于使用 argparser 将参数传递给入口点 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

我可以将参数传递给 SageMaker 估计器的入口点吗?

如何将 argparse 参数传递给类

从 subprocess.Popen 将参数传递给 argparse

有没有办法将命令行参数传递给自定义入口点(C / C ++)

将参数传递给 Docker 容器中的 Python argparse

将参数传递给python应用程序?