Вопрос
Я запускаю скрипт для подачи в исполняемый файл оператора, как показано ниже:
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
Я использую командную строку, и когда я запускаю exe с этими числами, бывают случаи, когда он кажется не в порядке. Как и в некоторых случаях, он напечатает 3 оператора из 52.62263, но затем, прежде чем они все будут напечатаны, он напечатает один 26.5651, а затем вернется к 52.62263. Это не только те цифры, которые действуют так. Для разных прогонов это могут быть разные числа (52,62263 между «двумя» 90 утверждениями). В общем, я хочу напечатать его по порядку сверху вниз. Любые предложения и использование моего кода какие-либо полезные решения? спасибо!
Решение
Я думаю, что сейчас происходит то, что вы не дожидаетесь завершения этих процессов, прежде чем они будут напечатаны. Попробуйте что-то подобное в последних двух строках:
from subprocess import Popen, STDOUT
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate()
print stdout
Другие советы
z = ('0.')
не является кортежем, поэтому ваш цикл для k в z
будет повторяться по символам " 0 " и ". " ;. Добавьте запятую, чтобы сообщить Python, что вы хотите, чтобы это был кортеж:
z = ('0.',)
Что сказал Эдуффи. И это немного чище; просто печатает, но вы поняли:
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
Поскольку вы сделали несколько постов об этом фрагменте кода, позвольте мне просто исправить / pythonify / beautify всего этого:
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