2015-08-27 6 views
1

У меня есть файл со списком путей. например:Параллельное выполнение задания, которое принимает несколько входов в Linux

/Работа/пользователь/1007/GVFS/кого-л-доля: сервер = xeonator, доля = с/Результаты/нормалей/8_mo/CNMC_N_191/ /Работа/пользователь/1007/GVFS/кого-л-доля : сервер = xeonator, доля = с/Результаты/нормалей/8_mo/204-196/

у меня есть программа (назовем его 'прога'), который принимает 3 параметра, 2 входные имена файлов и 1 выходного файла. Нормальное исполнение:

prog ~/A.txt ~/B.txt ~/out.txt 

Я хочу, чтобы выполнить параллельно свою программу с параметрами, построенных на основе каждой строки файла, например:

prog /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/A.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/B.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/out.txt 
prog /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/A.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/B.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/out.txt 

Я пытался использовать xargs и GNU параллельно, но Я не могу создать правильную командную строку для этих инструментов. Вот моя попытка:

cat ListPaths.txt | xargs -I '{}' -n 1 -P 8 ./SkullSegmenter/SkullSegmenter '{}'A.txt '{}'B.txt '{}'out.txt 

Но это не дает правильных аргументов. Может кто-то помочь мне с этим?

+0

Я переформатировать свой список в полные команды, и использовать ответ от этого вопроса : http://stackoverflow.com/questions/11488184/how-can-i-run-a-list-of-commands-in-parallel –

+0

Это не сработало ни –

ответ

1

Это следует сделать это:

cat ListPaths.txt | parallel ./SkullSegmenter/SkullSegmenter {}A.txt {}B.txt {}out.txt 

Тест с --dry-run, чтобы увидеть, если это команды, которые вы хотите запустить:

cat ListPaths.txt | parallel --dry-run ./SkullSegmenter/SkullSegmenter {}A.txt {}B.txt {}out.txt 
+0

Я запустил: 'cat ListPaths.txt | параллельное -j 8 ./SkullSegmenter/SkullSegmenter {} SubjectBoneWithoutSuturesIndividualV2.nrrd {} {} RegisteredSegmentedTemplateV2.nrrd SegmentedSubjectV2.nrrd' я получаю: 'SubjectBoneWithoutSuturesIndividualV2.nrrd7/GVFS/SMB-доля: Сервер = xeonator, доля = с/Результаты/нормалей/18_mo/CNMC_N_118/ Исключение Line: 143 SubjectBoneWithoutSuturesIndividualV2.nrrdor чтение файла/запустить/пользователь/1007/GVFS/кого-л-доля: сервер = xeonator, доля = с/Результаты/нормалей/18_mo/CNMC_N_118/ Файл не существует. SubjectBoneWithoutSuturesIndividualV2.nrrderver = xeonator, share = c/Results/Normals/18_mo/CNMC_N_118/' –

+0

Похоже, что только путь от файла передается как аргумент и не сливается с именами файлов A, B и out. –

+0

Поскольку я не использую SkullSegmenter, вы можете повторно протестировать команду 'echo' и, возможно, использовать короткий ввод, поэтому его не так сложно расшифровать? Также: что сделал '-dry-run'? –