我公司编写了一个应用程序(一个用于创建CloudFormation模板的小应用程序)并传递了所有团队使用的二进制文件。
在尝试自动化这一点时,我编写了一个Python脚本,它基本上将参数传递给Bash / Shell命令。这是一个包装器,所以我只是这样做,所以我可以迭代一堆配置文件来在AWS中创建CloudFormation堆栈。
在shell中,我会做
cfapp cfn create -p Namespace=namespace -p Env=env -p Team=team -p Region=region --spec-file file://partner/foobar.yaml
我用Python编写了这个,但是我遇到了语法错误:
os.system("cfapp cfn create -p Pool=%s" % pool "-p Namespace=%s" % namespace "-p Env=%s" % env "-p Team=%s" % team "-r %s" % region "--spec-file file://partner/"+str(config)+".yaml")
time.sleep(5)
我读到这是如何通过python实现的,但是,obv,我的实现是错误的。
答案 0 :(得分:3)
改为使用subprocess
:
subprocess.check_call([
"cfapp", "cfn", "create",
"-p", "Namespace=%s" % namespace,
"-p", "Env=%s" % env,
"-p", "Team=%s" % team,
"-p", "Region=region",
"--spec-file", spec_file,
])
就初始错误而言,字符串格式化语法不正确:
>>> pool = "foo"
>>> namespace = "bar"
>>> "cfapp cfn create -p Pool=%s" % pool "-p Namespace=%s" % namespace
File "<stdin>", line 1
"cfapp cfn create -p Pool=%s" % pool "-p Namespace=%s" % namespace
^
SyntaxError: invalid syntax
>>> "cfapp cfn create -p Pool=%s -p Namespace=%s" % (pool, namespace)
'cfapp cfn create -p Pool=foo -p Namespace=bar'