【问题标题】:os.environ.get() does not return the Environment Value in windows?os.environ.get() 不返回 windows 中的环境值?
【发布时间】:2017-03-23 14:19:11
【问题描述】:

我已经设置了 SLACK_TOKEN 环境变量。但是"SLACK_TOKEN=os.environ.get('SLACK_TOKEN')" 正在返回“无”。 SLACK_TOKEN 的类型是 NoneType。我认为 os.environ.get 没有获取环境变量的值。所以剩下的代码没有执行。

import os
from slackclient import SlackClient


SLACK_TOKEN= os.environ.get('SLACK_TOKEN') #returning None
print(SLACK_TOKEN) # None
print(type(SLACK_TOKEN)) # NoneType class

slack_client = SlackClient(SLACK_TOKEN)
print(slack_client.api_call("api.test")) #{'ok': True}
print(slack_client.api_call("auth.test")) #{'ok': False, 'error': 'not_authed'}


def list_channels():
    channels_call = slack_client.api_call("channels.list")
    if channels_call['ok']:
        return channels_call['channels']
    return None

def channel_info(channel_id):
    channel_info = slack_client.api_call("channels.info", channel=channel_id)
    if channel_info:
        return channel_info['channel']
    return None

if __name__ == '__main__':
    channels = list_channels()
    if channels:
        print("Channels: ")
        for c in channels:
            print(c['name'] + " (" + c['id'] + ")")
            detailed_info = channel_info(c['id'])
            if detailed_info:
                print(detailed_info['latest']['text'])
    else:
        print("Unable to authenticate.") #Unable to authenticate

【问题讨论】:

  • 你确定你已经正确设置了环境。如果你在 shell 中 echo "$SLACK_TOKEN" 会发生什么?
  • 如果找不到密钥,.get(..) 通常会返回 None。所以这意味着environ中没有SLACK_TOKEN
  • 如果你在 Windows 中设置它,你必须重新启动 shell,或者打开一个新的,让它显示出来。现有的 shell 不会获得新设置的环境变量。
  • 真的吗?!多么“蹩脚”?!
  • @WillemVanOnsem:不是真的“蹩脚”;它保证您打开的环境已经具有一致的状态。 Linux shell 的工作方式相同。

标签: python environment-variables slack


【解决方案1】:

就我而言,我在 env 文件中写了 错误的内容

SLACK_TOKEN=xxxxxyyyyyyyzzzzzzz

我忘了export之前,正确的应该是:

export SLACK_TOKEN=xxxxxyyyyyyyzzzzzzz

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我通过从值中删除引号来修复它。 例子: 我创建了一个 local.env 文件,其中存储了我的密钥值:

    *local.env:*
    export SLACK_TOKEN=xxxxxyyyyyyyzzzzzzz
    
    *settings.py:*
    SLACK_TOKEN = os.environ.get('SLACK_TOKEN')
    

    在您的 python 终端或控制台中,运行命令:*source local.env*

    ****在 gitignore 中涉及 local.env。确保不要将其推送到 git,因为您必须保护您的信息。

    这仅适用于本地服务器。希望这有帮助。快乐编码:)

    【讨论】:

    • 感谢我遇到了问题,因为我没有正确设置环境变量
    【解决方案3】:

    如果您在 Windows 命令提示符中声明了变量 SLACK_TOKEN,您将能够在该命令提示符的同一实例中访问它,而不是在任何地方,包括 Powershell 和 git bash。小心那个 每当您想运行该 python 脚本时,请考虑在声明这些变量的同一命令提示符下运行它 您可以随时通过运行 echo %SLACK_TOKEN% 检查变量是否存在于 cmd 中,如果不存在,则 cmd 将返回 %SLACK_TOKEN%

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多