2

我正在运行一个脚本来为 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 语句之间的 52.62263)。总而言之,我希望它按从上到下的顺序打印。有什么建议并使用我的代码有什么有用的解决方案吗?谢谢!

4

4 回答 4

8

z = ('0.')不是元组,因此您的for k in z循环将遍历字符“0”和“.”。添加一个逗号告诉 python 你希望它是一个元组:

z = ('0.',)
于 2009-06-19T14:57:07.183 回答
6

我认为现在发生的事情是,您不会在打印之前等待这些过程完成。在最后两行尝试这样的事情:

from subprocess import Popen, STDOUT
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate()
print stdout
于 2009-06-19T15:06:14.373 回答
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
于 2009-06-19T15:10:57.513 回答
2

既然你已经就这段代码发表了一些帖子,请允许我纠正/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
于 2009-06-19T15:11:09.620 回答