无法将变量传递给python中的bash命令

时间:2019-05-16 04:35:42

标签: python bash azure

我正在尝试将python变量传递给bash命令,如下所示:

subscriptionId = "xxxxx"
command = " az account show -s $subscriptionId"
subprocess.check_output(command)

我到那里出现以下错误:

error : az account show: error: argument --subscription/-s: expected one argument

2 个答案:

答案 0 :(得分:1)

分配subscriptionId = "xxxxx"之类的Python变量并不能神奇地将其放置在您的环境中,更不用说将其传递给子流程了。您需要自己进行插值:

command = f"az account show -s {subscriptionId}"

如果您真的要使用环境变量,请添加所需的变量并启用外壳扩展:

subscriptionId = ...
env = os.environ.copy()
env['subscriptionId'] = subscriptionId
command = "az account show -s ${subscriptionId}"
subprocess.check_output(command, env=env, shell=True)

或者,您可以弄乱自己的流程环境:

subscriptionId = ...
os.environ['subscriptionId'] = subscriptionId
command = "az account show -s ${subscriptionId}"
subprocess.check_output(command, shell=True)

在我看来,不建议使用这些选项,因为它们提出了shell=True带来的所有安全问题,同时却没有给您带来真正的优势。

答案 1 :(得分:0)

因为可变命令只是一个字符串,所以您可以简单地做到这一点。


subscriptionId = "xxxxx"
command = " az account show -s " + subscriptionId
subprocess.check_output(command)