2009-06-19 4 views
2

가 나는 EXE가 문 아래와 같은 파일을 공급하기 위해 스크립트를 실행 해요 경우 :파이썬과 문

for j in ('90.','52.62263.','26.5651.','10.8123.'): 
    if j == '90.': 
     z = ('0.') 
    elif j == '52.62263.': 
     z = ('0.', '72.', '144.', '216.', '288.') 
    elif j == '26.5651': 
     z = ('324.', '36.', '108.', '180.', '252.') 
    else: 
     z = ('288.', '0.', '72.', '144.', '216.') 

    for k in z: 

     exepath = os.path.join('\Program Files' , 'BRL-CAD' , 'bin' , 'rtarea.exe') 
     exepath = '"' + os.path.normpath(exepath) + '"' 
     cmd = exepath + '-j' + str(el) + '-k' + str(z) 

     process=Popen('echo ' + cmd, shell=True, stderr=STDOUT) 
     print process 

내가 명령 프롬프트를 사용하고 있는데 나는이 번호로 EXE를 실행할 때 시간 때이있다 그것은 순서대로되지 않습니다. 때로는 52.62263의 3 문장을 출력하지만, 모두 인쇄되기 전에 하나의 26.5651을 출력 한 다음 52.62263으로 돌아갑니다. 이런 식으로 행동하는 것은 아닙니다. 다른 실행은 다른 숫자 일 수 있습니다 ("두"90 문장 사이의 52.62263). 전체적으로, 위에서 아래로 순서대로 인쇄하고 싶습니다. 어떤 제안을하고 내 코드를 유용한 해결책으로 사용합니까? 감사!

답변

6

나는 지금 일어나고가 인쇄되기 전에 그 과정이 완료 될 때까지 기다리는하지 않는 것입니다 무슨 생각합니다. 마지막 두 줄에 다음과 같이 시도하십시오.

from subprocess import Popen, STDOUT 
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate() 
print stdout 
+0

완벽! 감사합니다 :) – Tyler

+0

바보 같은 질문 : 어떤 모듈 Popen()입니까? –

+1

@ 존 : 서브 프로세스의 클래스입니다. – SilentGhost

8

z = ('0.')은 튜플이 아니므로 for k in z 루프가 "0"및 "."문자를 반복합니다. 당신이 튜플되고 싶어 파이썬 말할 쉼표를 추가

z = ('0.',) 
+1

을 그 90을 수정했지만 3 번째와 4 번째 52.62263 문장 사이에 여전히 26.5651이 있습니까? – Tyler

5

무슨 내용일까요? 그리고 이것은 조금 더 깨끗합니다. 다만 인쇄,하지만 당신은 아이디어를 얻을 : 당신이 코드의이 비트에 대해 몇 가지 게시물을했습니다 때문에

import os 

data = { 
    '90.': ('0.',), 
    '52.62263.': ('0.', '72.', '144.', '216.', '288.'), 
    '26.5651.': ('324.', '36.', '108.', '180.', '252.'), 
    '10.8123.': ('288.', '0.', '72.', '144.', '216.'), 
} 

for tag in data: 
    for k in data[tag]: 
     exepath = os.path.join('\Program Files', 'BRL-CAD', 'bin', 'rtarea.exe') 
     exepath = '"' + os.path.normpath(exepath) + '"' 
     cmd = exepath + ' -el ' + str(tag) + ' -az ' + str(data[tag]) 
     process = 'echo ' + cmd 
     print process 
2

을 허용 나에게 단지 올바른/pythonify/모든 것을 아름답게 :

for j,z in { 
     '90.'  : ('0.',) , 
     '52.62263.' : ('0.', '72.', '144.', '216.', '288.') , 
     '26.5651.' : ('324.', '36.', '108.', '180.', '252.') , 
     '10.8123.' : ('288.', '0.', '72.', '144.', '216.') 
    }.iteritems(): 

    for k in z: 
     exepath = os.path.join('\Program Files' , 'BRL-CAD', 'bin' , 'rtarea.exe') 
     exepath = '"%s"' % os.path.normpath(exepath) 
     cmd = exepath + '-j' + str(el) + '-k' + z 

     process = Popen('echo ' + cmd, shell=True, stderr=STDOUT) 
     print process