質問

スクリプトを実行して、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に戻ります。このように振る舞うのは、これらの数字だけではありません。異なる実行は、異なる番号である場合があります(「2」90ステートメント間の52.62263)。全体として、上から下へ順番に印刷してほしい。提案やコードの使用に役立つ解決策はありますか?ありがとう!

役に立ちましたか?

解決

今起こっていることは、印刷する前にそれらのプロセスが終了するのを待っていないことだと思います。最後の2行で次のようなものを試してください:

from subprocess import Popen, STDOUT
stdout, stderr = Popen('echo ' + cmd, shell=True, stderr=STDOUT).communicate()
print stdout

他のヒント

z =( '0。')はタプルではないため、 for k in 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top