2017-02-22 12 views
-1

私の会社が書いたアプリケーション(CloudFormationテンプレートを作成するための小さなアプリケーション)があり、すべてのチームが使用するためにバイナリを渡しました。引数をbashに渡すPythonラッパー

これを少し自動化しようとすると、基本的に引数をBash/Shellコマンドに渡すPythonスクリプトが書かれました。これはラッパーなので、私はこれを作っているので、AWSでCloudFormationスタックを作成するための設定ファイルを繰り返し処理することができます。シェルで

、私は

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、私の実装は間違っています。代わりに

+1

使用のみ百分の一とグループ引数:

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, ]) 
あなたの初期誤差の観点で

、構文をフォーマットあなたの文字列が正しくありません。 '文字列の最後に...より良い:' subprocess'モジュールを引数のリストとともに使用して、コマンド行を自分で作成しようとしないでください。 –

+0

ah 'tuple'はたくさんの意味があります - ありがとう@ Jean-FrançoisFabre –

+0

私が何かを見逃したのかどうか分かりませんが、なぜあなたはすべてのbashを使わないのですか? – grail

答えて

3

使用subprocessは: `タプルで一緒に

>>> 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' 
+0

なぜoptparseとは対照的にサブプロセスですか?それはよりよく見える - ちょうど好奇心が強い。 –

+1

'optparse'はプロセスを実行しません... –

+2

@Claudiu:' subprocess.check_call'は、出力/エラーストリームの取得を気にしない方が良いです。 –

関連する問題