2009-06-19 2 views
2

Я бег сценария кормить ЕХ файл заявление, как показано ниже:Python и если оператор

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 

Я использую командную строку и при запуске еха с этими числами есть моменты, когда Кажется, он не в порядке. Как иногда он будет печатать 3 утверждения 52.62263, но затем, прежде чем они все будут напечатаны, он распечатает один 26.5651, а затем вернется к 52.62263. Это не только те цифры, которые действуют так. В разных режимах это могут быть разные числа (A 52.62263 между «двумя» 90 заявлениями). В общем, я хочу, чтобы он печатал его по порядку сверху вниз. Любые предложения и использование моего кода для любых полезных решений? благодаря!

ответ

6

Я думаю, что сейчас происходит то, что вы не ждут эти процессы, чтобы закончить, прежде чем они напечатаны. Попробуйте что-то подобное в последних двух строках:

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

Отлично! Спасибо :) – Tyler

+0

Немой вопрос: какой модуль Popen()? –

+1

@John: это класс в подпроцессе – SilentGhost

8

z = ('0.') не является кортежем, поэтому ваш цикл for k in z будет перебирать символы «0» и «.». Добавить запятую сказать питона вы хотите, чтобы быть кортежем:

z = ('0.',) 
+1

Это фиксирует 90, но есть еще 26.5651 между 3-м и 4-м 52,62263 заявлениями? – 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 
Смежные вопросы