Question

J'exécute un script pour alimenter un fichier exe avec une instruction comme ci-dessous:

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

J'utilise l'invite de commande et lorsque je lance l'exécutable avec ces chiffres, il y a des moments où cela ne semble pas être en ordre. Comme parfois, il imprimera 3 déclarations du 52.62263, mais avant qu’elles ne soient toutes imprimées, il imprimera un seul 26.5651, puis reviendra à 52.62263. Ce ne sont pas seulement ces chiffres qui agissent comme ça. Des exécutions différentes peuvent être des nombres différents (A 52.62263 entre "deux" 90 déclarations). Dans l’ensemble, je veux qu’il l’imprime en ordre croissant. Des suggestions et en utilisant mon code des solutions utiles? merci!

Était-ce utile?

La solution

Je pense que ce qui se passe actuellement, c'est que vous n'attendez pas que ces processus se terminent avant d'être imprimés. Essayez quelque chose comme ceci dans vos 2 dernières lignes:

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

Autres conseils

z = ('0.') n'est pas un tuple. Par conséquent, votre boucle pour k dans z va parcourir les caractères "0". et "." Ajoutez une virgule pour indiquer à Python que vous voulez que ce soit un tuple:

z = ('0.',)

Qu'est-ce que Eduffy a dit. Et c'est un peu plus propre; juste des impressions, mais vous avez l’idée:

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

Puisque vous avez publié quelques articles sur ce morceau de code, permettez-moi de corriger / pythonifier / embellir le tout:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top