Domanda

Sto eseguendo uno script per alimentare un file exe una dichiarazione come di seguito:

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

Sto usando il prompt dei comandi e quando eseguo l'exe con questi numeri ci sono momenti in cui non sembra essere in ordine. Come a volte stamperà 3 dichiarazioni del 52.62263 ma poi prima che siano tutte stampate stamperà un singolo 26.5651 e poi tornerà a 52.62263. Non sono solo quei numeri che si comportano così. Esecuzioni diverse possono essere numeri diversi (A 52.62263 tra "due" 90 dichiarazioni). Tutto sommato, voglio che lo stampi in ordine dall'alto verso il basso. Qualche suggerimento e utilizzo del mio codice eventuali soluzioni utili? grazie!

È stato utile?

Soluzione

Penso che ciò che sta accadendo in questo momento sia che non stai aspettando che quei processi finiscano prima che vengano stampati. Prova qualcosa del genere nelle tue ultime 2 righe:

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

Altri suggerimenti

z = ('0.') non è una tupla, quindi il tuo ciclo per k in z ripeterà i caratteri " 0 " e ". " ;. Aggiungi una virgola per dire a Python che vuoi che sia una tupla:

z = ('0.',)

Ciò che ha detto spigoloso. E questo è un po 'più pulito; stampa, ma ti viene l'idea:

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

Dato che hai pubblicato alcuni post su questo bit di codice, permettimi di correggere / pythonify / abbellire il tutto:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top