Python 和 if 语句

2 投票
4 回答
1745 浏览
提问于 2025-04-15 12:22

我在运行一个脚本,给一个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

撰写回答