【问题标题】:Python script - how to pass password as variable from command line argumentsPython脚本 - 如何从命令行参数将密码作为变量传递
【发布时间】:2019-06-27 15:42:59
【问题描述】:

我正在使用 python 运行 REST 调用以生成访问令牌。 REST 调用有效负载具有密码值。 我不想在那里对密码进行硬编码,而是在运行 python 脚本时将其作为选项传递。下面是python脚本中的payload。

payload = "grant_type=client_credentials&client_id=userid&client_secret=password&scope=AppIdClaimsTrust&intent=RequestLink"

目前我通过 python script.py

执行脚本

【问题讨论】:

  • 您是否研究过如何将命令行值传递给程序?你看过argparse吗?另外,请说明您是否希望在脚本启动时(argparse 处理)或脚本已经运行时将密码作为选项传递?
  • 我做到了,我也看到了一些例子。但是我无法在我的脚本中成功实现它们。因此 throught 会在这里问这个问题,期待一个直接的答案(我已经得到了)。
  • 他们提出的问题本来可以有更好的结构。但讨论的内容很有趣。

标签: python variables command line


【解决方案1】:

将令牌设置为环境变量:

$ export TOKEN=XXXXXXX

然后使用os 库:

#!/usr/bin/env python
import os

token = os.environ['TOKEN'] 

使用token,您通常会将其硬编码到您的脚本中。

或者,您可以将其作为command line argument 传递。

$ python script.py XXXXXXXX

在您的脚本中,使用以下命令访问令牌:

#!/usr/bin/env python
import sys

if len(sys.argv) > 1:
    token = sys.argv[1]
else:
    print("No token passed")

【讨论】:

  • 那行得通。但是我们不能通过命令行传递它吗?类似“python script.py passwordvalue”
  • 我在你写评论的时候编辑了这篇文章。使用sys.argv
  • 我对帖子进行了 1 次编辑。如果没有将参数传递给函数,则此编辑可确保您不会出现越界异常。
  • 还有一个问题,我看到有人在使用它,例如 "python script.py --arg1 "value" --arg2 "value" 你能帮我解决一下吗?
【解决方案2】:

您可以使用sys.argv 来使用它。这提供了传递给脚本的参数列表,其中sys.argv[0] 是脚本名称(或“-c”)。您可以使用sys.argv[1] 访问第一个参数,尽管通常最好进行一些错误检查以确保您确实得到了您想要的。我经常会这样做:

import sys
args = sys.argv
if args[1]:
    password = args[1]

您还可以使用更强大的解析器,例如argparse

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2016-10-26
    • 2014-10-25
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多