当前位置: 首页 > 知识库问答 >
问题:

使用argparse时设置环境变量中的选项

年风华
2023-03-14

我有一个脚本,它有一些选项,可以在命令行上传递,也可以从环境变量中传递。如果两者都存在,CLI应优先,如果两者都未设置,则会发生错误。

我可以检查是否在解析后分配了该选项,但我更愿意让argparse来完成繁重的工作,并在解析失败时负责显示usage语句。

我已经提出了一些替代方法(我将在下面作为答案发布,以便可以单独讨论),但它们对我来说很笨拙,我认为我遗漏了一些东西。

有没有一种公认的“最佳”方法来做到这一点?

(编辑以在未设置CLI选项和环境变量时使所需行为清晰)

共有1个答案

晏弘雅
2023-03-14

可以将参数的default=设置为os.environ.get()以及要抓取的环境变量。

您还可以在.get()调用中传递第二个参数,如果.get()找不到该名称的环境变量(默认情况下.get()返回none),则该参数为默认值。

import argparse
import os

parser = argparse.ArgumentParser(description='test')
parser.add_argument('--url', default=os.environ.get('URL'))

args = parser.parse_args()
if not args.url:
    exit(parser.print_usage())
 类似资料:
  • 问题内容: 我有一个脚本,该脚本具有某些选项,可以在命令行或环境变量中传递它们。如果两者都存在,则CLI应该具有优先权,如果两者均未设置,则会发生错误。 我可以检查是否在解析后分配了该选项,但是我更喜欢让argparse进行繁重的工作,并在解析失败时负责显示用法语句。 我已经提出了一些替代方法(我将在下面作为答案发布,以便可以分别讨论),但是它们对我来说很不合时宜,我认为我缺少一些东西。 有没有公

  • 问题内容: 在中,我有以下脚本正在工作: Bash中的功能等效于什么? 有直接的模拟吗?环境变量用于查找可执行文件。 问题答案: 将VAR设置为value。如果需要空格,请用单引号将其引起来。如果要对变量进行插值,请使用双引号,例如。

  • ENV 设置环境变量 格式有两种: ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... 这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN,还是运行时的应用,都可以直接使用这里定义的环境变量。 ENV VERSION=1.0 DEBUG=on \ NAME="Happy Feet" 这个例子中演示了如何换行,以

  • 问题内容: 有没有一种方法可以在Linux中使用C设置环境变量? 我尝试了和,但是它们似乎并没有为我工作。 问题答案: 我将在这里做出一个疯狂的猜测,但是这些功能似乎不起作用的正常原因不是因为它们不起作用,而是因为用户并不真正了解环境变量的工作原理。例如,如果我有此程序: 然后我从外壳程序运行它,它不会修改外壳程序的环境- 子进程无法做到这一点。这就是为什么内置可修改环境的shell命令的原因,以

  • 我尝试为将在Windows子系统Linux中运行的Visual Studio Code任务设置环境变量。然而,它似乎不起作用。这是我的tasks.json: 输出为: 请注意,默认情况下,shell已被手动修改为WSL的,正如这里和这里推荐的那样。

  • 问题内容: 需要基于构建环境配置来设置标签的href值。 例如: 分期应有 产品应具有 当前设置: 生成命令: .env.staging.js: index.html: 在index.html中,这似乎不起作用。虽然类似的设置适用于JS文件 (可能是因为将JS文件解析并捆绑到一个文件中,并且捆绑程序在该时间点读取值) 尝试过的事情: index.html: (类似于PUBLIC_URL变量) 与浏