1

次のコードがあります。

#!/usr/bin/python
import sys
import subprocess
import random
import time

if len(sys.argv) != 7:
    print "Usage: " + sys.argv[0] + " <executable> r m n p a"
    sys.exit(1)

myexecutable = sys.argv[1]
r = int(sys.argv[2])
list_m = map(int, sys.argv[3].split(","))
list_n = map(int, sys.argv[4].split(","))
list_p = map(float, sys.argv[5].split(","))
list_a = map(int, sys.argv[6].split(","))

r1 = random.Random()

for m in list_m:
    for n in list_n:
        for p in list_p:
            for a in list_a:
                if a <= m:
                    for i in range(r):
                        print '%04.3f' % (r1.randint(1, 100))
                        seed = time.time()
                        r1 = random.Random(seed)
                        print m, n, p, a, i
                        command = myexecutable + " -seed "+ str(r1) + " -m "+ str(m) + " -n "+ str(n) +" -p "+ str(p) +" -a "+ str(a)
                        f = open("seed_" + str(r1) + "-m_" + str(m) + "-n_" + str(n) + "-p_" + str(p) + "-a_" + str(a)+ "-i_" + str(i) + ".xml", "w")
                        subprocess.call(command, shell=True, stdout=f)
                        f.close()

"Myexecutable" は C++ で書かれた実用的な単純なプログラムで、ブースト オプション以外に洗練されたライブラリを呼び出しません。すべてがうまくいくようです。

次のコードを実行すると

python generate.py

奇妙な、信じられないほどのエラーが発生します。

/bin/sh: 1: random.Random を開けません: そのようなファイルはありません

ランダム関連の行にコメントを付けて r1 に固定値を設定すると、次のようにインデント エラーが発生します (lol):

f = open("-s_" + str(r1) + "-m_" + str(m) + "-n_" + str(n) + "-p_" + str(p) + "-a_" + str (a)+ "-i_" + str(i) + ".xml", "w") ^ IndentationError: 予想外のインデント

矢印は -a_ を指しているので、行の途中にあるため、インデントエラーになることはありませんよね?

だから私は自分のプロジェクトをきれいにし、別のディレクトリにコピーし、作り直してからスクリプトを再実行します。現在、ループは正常に実行されていますが (コンソール出力とファイルが作成されています)、実行可能ファイルは実行されていないようです (ファイルは空です)。ループの反復ごとに、まだエラーが発生しています:

/bin/sh: 1: random.Random を開けません: そのようなファイルはありません

amo 上記のようにもう一度コメントを入れると、取得できます。:

エラー: オプション '--seed' の引数 ('eed') が無効です

これは、c++ 実行可能ファイルによる明らかなメモリ リーク (バッファ/スタック オーバーフロー) ですか?

4

1 に答える 1

1

str(random.Random(3))戻ります'<random.Random object at 0x1783870>'ので、あなたが探しているのはこれだと思います:

r1 = random.Random(seed)
actual_random = r1.random()
print(actual_random) # prints 0.08487199515892163 etc
print(str(r.random()).split(".")[1]) # prints 08487199515892163

識別のためにpep8を読んでください

また、この方法で文字列を連結することもできます。よりきれいに見えます。少なくともそれは私が好むものです:

lot_of_staff = [1,10,2,3,5,6,7,8]
conc="".join([str(i) for i in lot_of_staff])
print(conc)# prints '110235678'

リスト内包表記とstring.join

于 2013-10-02T22:51:55.570 に答える