Ошибка: [Errno 32] Сломанная труба в коде Python

Я пытаюсь скомпилировать этот код Python в Ubuntu 12.04.

import numpy as np
import argparse
parser = argparse.ArgumentParser(add_help=True)
parser.register('type', 'bool',
       lambda v: v.lower() in ("yes", "true", "t", "1"))
parser.add_argument("-multi", type="bool", action="store",
           default=False, help="True output a single command")
parser.add_argument("-db_host", type=str, action="store",
           default="localhost",
           help="True output a single command")
parser.add_argument("-qoi_ex", type=str, action="store",
           default="v",
           help="Example")
parser.add_argument("-qoi_factor", type=float, default="1",
           action="store", help="QoI scaling factor")
parser.add_argument("-use_rs", type=bool, default="False",
           action="store", help="Use reaction splitting method")
args = parser.parse_known_args()[0]
# Note that 0.6931 is np.log(2)
base = "run.py -mimc_TOL {TOL} -mimc_max_TOL 0.5  \
       -qoi_seed {seed} -mimc_M0 30 -qoi_ex {ex} -qoi_factor {factor}   -use_rs True \
       -mimc_dim 1 -mimc_w 1 -mimc_s 1 -mimc_gamma 1 -mimc_beta 2    -mimc_moments 4 \
       -mimc_bayesian {bayesian} "
cmd_multi = "python " + base + "-mimc_verbose False -db True           
            -db_tag {tag} " + " -db_host {} ".format(args.db_host)
cmd_single = "python " + base + " -mimc_verbose True -db False "
tagr = lambda x: "rs" if x else "tl"
if not args.multi:
    print(cmd_single.format(seed=0, bayesian=True, TOL=0.01, ex=args.qoi_ex, factor=args.qoi_factor))
else:
    realizations = 10
    TOLs = np.sqrt(2.)**-np.arange(5., 12.)
    for TOL in TOLs:
        for i in range(0, realizations):
            print cmd_multi.format(bayesian=True, tag="TL_"+args.qoi_ex+"_"+tagr(args.use_rs), TOL=TOL,  seed=np.random.randint(2**32-1), ex=args.qoi_ex, factor=args.qoi_factor)

Но я получаю это сообщение об ошибке, которое я не знал, как исправить. Я не уверен, что проблема связана с процедурой распараллеливания.

./echo_test_cmd.py -multi True | parallel -j15 Traceback (последний последний вызов): файл «./echo_test_cmd.py», строка 43, в печати cmd_multi.format(bayesian=True, tag="TL_"+args.qoi_ex+"_"+tagr(args. use_rs), TOL=TOL, seed=np.random.randint(2**32-1), ex=args.qoi_ex, factor=args.qoi_factor) IOError: [Errno 32] Broken pipe

Может ли кто-нибудь помочь? Спасибо.


person user144209    schedule 20.04.2016    source источник
comment
Как вы выполняете этот файл?   -  person univerio    schedule 21.04.2016
comment
Я запускаю файл в оболочке Ubuntu 12.14.   -  person user144209    schedule 21.04.2016
comment
Позвольте мне сделать это совершенно ясно. Какова последовательность букв, которую вы набрали в своей оболочке, чтобы запустить этот файл?   -  person univerio    schedule 21.04.2016
comment
./echo_test_cmd.py -multi True | параллельный -j15   -  person user144209    schedule 21.04.2016
comment
Ну, это ваша проблема. Это означает, что команда parallel по какой-то причине закрыла канал.   -  person univerio    schedule 21.04.2016
comment
да, когда я его не использую, он работает, но основная функция, которую я хочу использовать, связана с распараллеливанием. Так и не понял как это исправить.   -  person user144209    schedule 21.04.2016
comment
Проблема заключается не в вашем скрипте Python, а в самой команде parallel или в том, как вы ее используете. Попробуйте перенаправить вывод вашего скрипта в файл и посмотрите, что вам скажет parallel: ./echo_test_cmd.py -multi True > cmds.txt, а затем parallel -j15 < cmds.txt.   -  person univerio    schedule 21.04.2016
comment
Я попробовал ваше предложение, но ничего не получил как ошибку.   -  person user144209    schedule 21.04.2016


Ответы (1)


Перезагрузка и повторная установка пакета параллельных инструментов решили проблему. Спасибо

person user144209    schedule 21.04.2016