Frage

Ich führe ein Skript aus, um eine EXE -Datei eine Anweisung wie unten zu füttern:

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

Ich verwende die Eingabeaufforderung und wenn ich das Exe mit diesen Zahlen ausführe, gibt es Zeiten, in denen es nicht in Ordnung zu sein scheint. Wie manchmal wird es 3 Aussagen des 52.62263 ausdrucken, aber bevor sie alle gedruckt werden, wird ein einzelner 26,5651 ausgedruckt und dann zu 52,62263 zurückkehren. Es sind nicht nur diese Zahlen, die so verhalten. Unterschiedliche Läufe können unterschiedliche Zahlen sein (ein 52,62263 zwischen "zwei" 90 Anweisungen). Alles in allem möchte ich, dass es auf der Reihenfolge von oben nach unten druckt. Irgendwelche Vorschläge und verwenden meinen Code irgendwelche hilfreichen Lösungen? Danke!

War es hilfreich?

Lösung

Ich denke, was gerade passiert, ist, dass Sie nicht darauf warten, dass diese Prozesse fertig sind, bevor sie gedruckt werden. Probieren Sie so etwas in Ihren letzten 2 Zeilen aus:

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

Andere Tipps

z = ('0.') ist kein Tupel, deshalb deine for k in z Loop wird über die Charaktere "0" und "" iterieren. " Fügen Sie ein Komma hinzu, um Python mitzuteilen, dass es ein Tupel ist:

z = ('0.',)

Was Eduffy sagte. Und das ist ein wenig sauberer; Drucken nur, aber Sie haben die Idee:

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

Da Sie ein paar Beiträge zu diesem Stück Code erstellt haben, können Sie mir das Ganze nur korrigieren/pythonify/verschönern:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top