2009-06-30 3 views
1

exeファイルを実行すると、いくつかのものが出力されます。私はこれをいくつかの数字で実行して、54行目(= blah)を出力しようとしています。それはプロセスが定義されていないと私は本当にこれを修正し、私が画面に印刷したいものを得る方法を確信していないと言います。もし誰かがコードを書いたり、これを修正する方法を投稿してくれれば、とてもありがとう!for pythonの文

for j in ('90','52.62263','26.5651','10.8123'): 
    if j == '90': 
     k = ('0',) 
    elif j == '52.62263': 
     k = ('0', '72', '144', '216', '288') 
    elif j == '26.5651': 
     k = (' 324', ' 36', ' 108', ' 180', ' 252') 
    else: 
     k = (' 288', ' 0', ' 72', ' 144', ' 216') 

    for b in k: 

     outputstring = process.communicate()[0] 
     outputlist = outputstring.splitlines() 
     blah = outputlist[53] 

     cmd = ' -j ' + str(j) + ' -b ' + str(b) + ' blah ' 

     process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 

     print cmd   

私は例えばプリントアウトしようとしています:

-j 90 -az 0(その後、何何とかが含まれている)何とかは、ライン54ライン54枚のプリントアウト多くの情報をです。主に言葉。ライン39

blah = outputlist[53] 

はIndexError:私は右後

-j 90 -az 0

ロビー@ 54は、画面に言う並ぶものを印刷したいリストのインデックスを範囲外

@ Robbieもう一度。あなたの助けのおかげで、トラブルみんなのために申し訳ありません...

私もoutputlistに入れてみました[2]、それは同じエラー与える:/

+0

「行54(= blah)」?何? –

+0

は、54行がblah ...と同じことを意味しています。sign means =行54は、等と同じことです。....... – Tyler

+0

@Tyler、それは失礼です。どういう意味ですか?なぜそこに言葉がありますか?あなたは何をしようとしているのですか?コードサンプルには行番号はありません。あなたは何について話していますか?あなたの質問を明確にしてください。 –

答えて

6

私はちょっと気をつけてください。

# aesthetically (so YMMV), I think the code would be better if it were ... 
# (and I've asked some questions throughout) 

j_map = { 
    90: [0], # prefer lists [] to tuples(), I say... 
    52.62263: [0, 72, 144, 216, 288], 
    26.5651: [324, 36, 108, 180, 252], 
    10.8123: [288, 0, 72, 144, 216] 
    } 
# have a look at dict() in http://docs.python.org/tutorial/datastructures.html 
# to know what's going on here -- e.g. j_map['90'] is ['0',] 

# then the following is cleaner 
for j, k in j_map.iteritems(): 
    # first iteration j = '90', k=[0] 
    # second iteration j = '52.62263'', k= [0,...,288] 
    for b in k: 
    # fixed the ordering of these statements so this may actually work 
    cmd = "program_name -j %f -b %d" % (j, b) 
     # where program_name is the program you're calling 
     # be wary of the printf-style %f formatting and 
     #  how program_name takes its input 
    print cmd 
    process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
    outputstring = process.communicate()[0] 
    outputlist = outputstring.splitlines() 
    blah = outputlist[53] 

cmdを定義する必要があります。現在、「-j 90 -b 288」のようなものを実行しようとしています。私はcmd = "program_name -j 90 -b 288"のようなものが必要だと推測します。

あなたの質問にまったく答えるかどうかわかりませんが、思考のために食べ物を与えることを願っています。

+0

@ブライアン彼らは整数でなければなりません。 空白は2番目の数字のグループを示します。 – Tyler

+1

この場合、なぜリストをタプルにするのが好きですか?リストを使用する必要はありません – truppo

+0

リストを好む理由の1つは、タプル( "(0)"と "[0]"が常にリストになります)を "(0)"にするのを避けることです。タプルの最適な使い方は、シーケンスが不変でなければならない場所(例えば、辞書キー)です。タプルを好む人もいます。それは好みの問題です。この場合、なぜタプルを好きになりますか? –

2

は、あなたがこの権利であることを確認していますが

cmd = ' -j ' + str(el) + ' -jk ' + str(az) + ' blah ' 

あなたの実行ファイルはどこですか?

+0

よく私は 'ああ'が正しいとは思わない。私はそれが欲しいものをやっています。基本的にそれは(何とかせずに)出力します。 -k 90 -jk 0 -k 52.62253 -jk 0 -k 52.62243 -jk 72 などなどなど 実行可能プログラムであるそのフォルダ.exeファイルをフォルダをファイル – Tyler

+0

-k 90 -jk 0はそれ自身の行です – Tyler

+0

など – Tyler

2

次の行

outputstring = process.communicate()[0] 

process変数のcommunicate()メソッドを呼び出し、まだprocess定義されていません。後でコードで定義します。その定義を上に移動する必要があります。

また、変数名(jk、およびjk)も混乱します。

+0

これが問題であれば、UnboundLocal例外が発生します。 – balpha

+0

okこれはあまり混乱しないように編集されています。jkは現在 – Tyler

+0

です。また、他の問題があります。たとえば、私はプロセス定義をkのbの下に移動します:そして今、それは私のcmd定義されていない – Tyler

1

processは、あなたのステートメントが順不同であるため定義されていません。

outputstring = process.communicate()[0] 
    outputlist = outputstring.splitlines() 
    blah = outputlist[53] 

    cmd = ' -j ' + str(j) + ' -b ' + str(b) + ' blah ' 

    process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 

はおそらく動作しません。最初の行のprocessは未定義です。

+0

私はprcoessをoutputring = process.communicate()[0]の前に移動し、cmdが定義されていないことを伝えます – Tyler

+1

文をランダムに動かしていますか?あなたはそれで何を達成したいですか?コードを変更した場合は、質問を更新してください。 –

+1

タイラー、あなたはcmdを移動する必要があります。 使用する前に定義する必要がありますが、この小さな事実はあなたのハングアップのようです。 – Robbie