2017-02-22 1 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

내가 파이썬에서 쓴 할 것입니다하지만 난 구문 오류 얻을 :

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)

내가이를 통해 그것을 수행하는 방법이었다 읽기 파이썬 불구하고, obv, 내 구현이 잘못되었습니다. 대신

+1

만 사용 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'은 많은 의미가 있습니다 - thanks @ 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'이 더 좋습니다. –

관련 문제