2017-11-11 7 views
1

매번 약간 다른 매개 변수로 여러 시뮬레이션을 실행해야하는 작업이 있습니다. 이 자동화하는 파이썬 스크립트를 작성하고 싶습니다하지만 문제가 있어요.Python : 명령 줄 명령을 쓸 때의 문자열 서식 지정

설명을 단순화하기 위해 명령 줄에서 각기 다른 매개 변수 집합을 사용하여 N 시뮬레이션을 호출했습니다. 스크립트를 하나씩 실행하고 싶습니다. 시뮬레이션을 실행하기 위해 ...이 주어진 시뮬레이션의 매개 변수를 나타내는 경우 명령 줄에 execute_simulation...을 작성한다고 가정 해보십시오. 내 스크립트는 다음과 같습니다.

from subprocess import call 

<code> 

for i in range(0, N): 
    call('execute_simulation_%s' % (parameters[i])) 

그러나 스크립트를 호출 할 때 항상 오류 메시지가 표시됩니다. 누구나 이것이 왜 그럴 수 있다고 제안 할 수 있습니까?

+2

무엇이 오류 메시지입니까? ['call'] (https://docs.python.org/2.7/library/subprocess.html#subprocess.call)에서는 문자열이 아니라 args 목록을 기대합니다 ('shell = True'를 사용하지 않는 한). 기피). –

+1

오류 메시지는 무엇입니까? –

+0

시뮬레이션 파일은 정확히 무엇입니까? 'parameters []'에 파일 확장자도 포함되어 있습니까? 'call ('ca % s.exe'% lc ')'이 나를 위해 일하고있다 (Win7). – bastelflp

답변

0

오류 메시지가 포함되어 있다면 도움이되지만 어쨌든 도와 드리겠습니다.

call 함수는 일련의 문자열이 단일 문자열이 아니기를 기대하지만 (Popen 설명서에는 Windows에서 문자열로 변환되므로 특정 경우에 작동 할 수도 있음).

또한, 제공 한 예제 코드에서 call('execute_simulation_%s' % (parameters[i]))을 수행했습니다. parameters[i]이 문자열이 아니라 목록 인 경우 튜플, 생성기 또는 str이 해당 객체에서 호출되어 사용자가 execute_simulation ['arg0', 'arg1', 'arg2', 'arg3', 'arg4']과 같은 것을 얻을 수 있습니다. 이것은 아마도 당신이 원하는 것이 아닙니다. 시퀀스에 ' '.join으로 전화하면 execute_simulation arg0 arg1 arg2 arg3 arg4과 같은 것을 얻을 수 있습니다.

나는 각 호출에 대한 인수가 들어있는 목록 목록 인 parameters을 가정합니다. 그럼 당신은 그냥이 (그냥 call처럼 작동) 파이썬 3.5 코드를 사용하는 것이 좋습니다 때문에

args = [f'arg{i}' for i in range(5)] 
parameters = [args for i in range(5)] 

for args in parameters: 
    call(('execute_simulation', *args)) 

는 또한, subprocess.run 사용을 고려 할 수 있습니다. 나는 귀하의 경우에 이것이 효과가 있기를 바랍니다.