windows pycharm 中的程序参数中未评估环境变量

问题描述 投票:0回答:2

尝试通过 pycharm 从数据流快速入门example 运行 wordcount.py 示例,我在解析包含环境变量的命令行参数时遇到了问题。

当我设置环境变量并在终端中使用相同的参数运行脚本时,它工作得很好:

python wordcount.py --input gs://dataflow-samples/shakespeare/kinglear.txt --output gs://%BUCKET%/wordcount/outputs --runner DataflowRunner --project %PROJECT% --temp_location gs://%BUCKET%/tmp/

我尝试了以下解析环境变量的变体 - 都没有用:${ENV}, $ENV$, %ENV%.

我在 Windows 10 上工作,PyCharm 版本 2019.3.1.

python windows pycharm environment-variables
2个回答
0
投票

当您将环境变量作为参数值(例如,

--project
--temp_location
)传递给 Pycharm 配置时,它会将这些变量作为“string”值而不是您在第一个屏幕截图中设置的实际值“ 用户环境变量”。我在 StackOverflow 上快速搜索了许多相关线程,但没有找到解决方案,所以我想出了自己的解决方案,即使用您当前的设置并在解析代码中的参数后替换值:

# Args parsing here

if args.project == "${PROJECT}":
    args.project = os.environ.get("PROJECT")
    args.temp_location = args.temp_location.replace("${BUCKET}", os.environ.get("BUCKET"))

不过,我觉得你应该考虑在什么时候使用它

  • 你使用 PyCharm 比使用 Terminal 更频繁。
  • 有许多引用环境变量的参数,您必须根据不同的设置更改它们的值。

希望Pycharm能尽快支持这个功能


0
投票

试试这个:

if __name__ == '__main__':
    args = (list(map(lambda x: os.environ.get(x.strip()[1:])
    if x.strip().startswith('$')
        or (x.strip().startswith('%') and x.strip().endsswith('%'))
    else x, sys.argv[1:])))

它将接受任何以“$”开头或被“%”包围的运行配置输入,并尝试解析环境变量

它将接受从 PyCharm 传递的参数。

© www.soinside.com 2019 - 2024. All rights reserved.