题
我正在运行一个脚本来为exe文件提供如下语句:
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时,有时它似乎没有顺序。有时它会打印出52.62263的3个语句,但是在它们全部打印之前它将打印出单个26.5651,然后返回到52.62263。这不仅仅是那些像这样的数字。不同的运行可以是不同的数字(在“两个”90个语句之间为A 52.62263)。总而言之,我希望它从上到下依次打印。任何建议和使用我的代码任何有用的解决方案谢谢!
解决方案
我认为现在正在发生的事情是,您不会在打印之前等待这些流程完成。在最后两行中尝试这样的事情:
from subprocess import Popen, STDOUT
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate()
print stdout
其他提示
z =('0。')
不是元组,因此z 循环中k的将迭代字符“0”。和“。”。添加一个逗号告诉python你希望它是一个元组:
z = ('0.',)
eduffy说。这有点清洁;只是打印,但你明白了:
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 /美化整个事情:
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
不隶属于 StackOverflow