首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用an解析器将参数传递到入口点python脚本

问使用an解析器将参数传递到入口点python脚本
EN

Stack Overflow用户
提问于 2020-05-02 19:29:14
回答 2查看 3.1K关注 0票数 7

我希望将用户输入的参数从命令行传递到python脚本的入口点。到目前为止,我已经尝试使用far解析将参数从命令行传递给test.py脚本。当我试图传递这些参数时,它们是不被识别的,并且我收到了以下错误。

load_entry_point(“同义词库=0.1”、“控制台_脚本”、“同义词库”)()

TypeError: find_synonym()缺少一个必需的位置参数:'argv‘

我在这里看过其他例子,但未能找到任何解决办法。

代码语言:javascript
复制
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脚本入口点如下所示

代码语言:javascript
复制
setup(entry_points={'console_scripts': ['test=test_folder.main:main']})

我期望发生的事情类似于运行时的情况。在传递给函数时,它将成功地打印出hello。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-07 13:47:08

所以,当我从函数中移除参数时,它就起作用了。

代码语言:javascript
复制
 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命令重新安装它。

票数 6
EN

Stack Overflow用户

发布于 2022-05-26 19:03:19

为了充分利用这两个世界,main()应该接受argv (这使得测试更容易,就像您的observed一样)。但是,您需要一个缺省值来使用它作为入口点,这样就可以在不使用args的情况下调用它。看起来是这样的:

代码语言:javascript
复制
def main(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)

现在它是可测试的,您仍然可以使用它作为入口点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61565153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档