Déclaration Python et if
-
06-07-2019 - |
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!
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