我正在尝试将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
答案 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)