次のコードがあります。
#!/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++ 実行可能ファイルによる明らかなメモリ リーク (バッファ/スタック オーバーフロー) ですか?