Запуск исполняемого файла через python сбивает с толку интерпретатора / ОС

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) + "[ CN04] "+ str (a) +" -i_ "+ str (i) +".xml "," w ") ^ IndentationError: неожиданный отступ

Стрелка указывает на -a_, поэтому она не может быть ошибкой отступа, так как она находится в середине строки правильно?

Поэтому я очищаю свой проект, копирую в другой каталог, переделываю, а затем повторно запускаю скрипт. Теперь цикл работает нормально (консольный вывод и созданные файлы), но исполняемый файл, кажется, не запускается (файлы пустые), и в каждой итерации цикла я все еще получаю ошибку:

/bin/sh: 1: невозможно открыть random.Random: нет такого файла

amo Если я снова добавлю комментарии, как упоминалось выше, я получу! :

Ошибка: аргумент ('eed') для параметра "--seed" недействителен

Ну, это очевидная утечка памяти (переполнение буфера/стека) с помощью исполняемого файла c++?

  • 0
    что произойдет, если вы скажете fname = "seed_" + str(r1) + "-m_" + str(m) + "-n_" + str(n) + "-p_" + str(p) + "-a_" + str(a)+ "-i_" + str(i) + ".xml"; print fname;open(fname,"w");
  • 1
    Я не прочитал ваш код Python, но я действительно сомневаюсь , что это «утечка памяти» или стек / переполнение буфера или что - нибудь еще , связанные с ++ кода на C вы вызываете.
Теги:
interpreter

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

  • 0
    Вы правы, я не могу поверить, как я это пропустил. Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню