Pergunta

Estou executando um script para alimentar um arquivo exe uma declaração como abaixo:

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

Estou usando o prompt de comando e quando executo o exe com esses números, há momentos em que não parece estar em ordem. Como às vezes, ele imprimirá 3 instruções do 52.62263, mas antes que todas sejam impressas, ele imprimirá um único 26.5651 e depois voltará para 52.62263. Não são apenas os números que agem assim. Executas diferentes podem ser números diferentes (um 52.62263 entre "duas" declarações 90). Em suma, eu quero que ele imprimi -lo em ordem de cima para baixo. Alguma sugestão e usando meu código alguma soluções úteis? obrigado!

Foi útil?

Solução

Acho que o que está acontecendo agora é que você não está esperando que esses processos terminem antes de serem impressos. Experimente algo assim em suas duas últimas linhas:

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

Outras dicas

z = ('0.') não é uma tupla, portanto sua for k in z O loop iterará sobre os personagens "0" e ".". Adicione uma vírgula para dizer ao Python que você quer que seja uma tupla:

z = ('0.',)

O que Eduffy disse. E isso é um pouco mais limpo; Apenas imprime, mas você tem a ideia:

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

Como você fez algumas postagens sobre esse código, permita -me corrigir/pitonificar/embelezar a coisa toda:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top