Python 和 if 语句
我在运行一个脚本,给一个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的语句,然后在这些语句都打印完之前,又会突然打印出一条26.5651,然后再回到打印52.62263。这种情况不仅仅发生在这些数字上。不同的运行中,可能会出现不同的数字(比如在“两个”90的语句之间出现一个52.62263)。总之,我希望它能按照从上到下的顺序打印出来。有没有什么建议或者能帮我解决这个问题的方法?谢谢!
4 个回答
5
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
8
z = ('0.')
其实不是一个元组,所以当你写 for k in z
的时候,它会一个一个地遍历字符 "0" 和 "."。要让 Python 知道你想要的是一个元组,你需要加一个逗号:
z = ('0.',)
6
我觉得现在发生的情况是,你没有等这些过程完成就开始打印结果。试试在你最后的两行代码中这样写:
from subprocess import Popen, STDOUT
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate()
print stdout