python 在windows pychar的程序参数中未计算环境变量

m528fe3b  于 2023-02-28  发布在  Python
关注(0)|答案(2)|浏览(100)

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

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

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

我尝试了以下解析环境变量的变体-没有一个有效:${环境}、$环境$、%环境%。
我正在Windows 10上工作,PyCharm版本2019.3.1.

3j86kqsm

3j86kqsm1#

当您将环境变量作为参数的值传递时(例如,--project--temp_location)到Pycharm配置,它将这些变量作为“字符串”值,而不是您在第一个屏幕截图“用户环境变量"上设置的真实的值。我在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很快就能支持这个特性。

gr8qqesn

gr8qqesn2#

试试这个:

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传递的参数。

相关问题