gnu parallel --pipe 产生空输出文件

Posted

技术标签:

【中文标题】gnu parallel --pipe 产生空输出文件【英文标题】:gnu parallel --pipe producing empty output files 【发布时间】:2019-01-11 18:24:16 【问题描述】:

我正在努力尝试并行运行 gnu。我有一个 shell 脚本,它使用不同的输入参数调用一个 python 程序数千次:

python /path/to/program/run.py A_02_01 input.fasta > /path/to/output/out.txt
python /path/to/program/run.py A_02_02 input.fasta > /path/to/output/out.txt

我尝试像这样使用 gnu 并行:

cat iedb_classi_call.sh  | parallel  --recstart 'python' --recend '\n' --pipe   bash

但是我所有的输出文件都是空的。我正在努力找出原因。我没有从 gnu 并行中得到错误。

在我添加 recstart 和 recend 选项之前,我得到了一些 python 调用的非空输出文件,但其他程序调用没有执行并得到如下错误:

run.py: error: incorrect number of arguments
bash: line 422: 01_ input.fasta: command not found
Usage: run.py allele fasta_file

这让我觉得并行读取没有正确分离的块,我将 --recstart / --recend 参数添加到并行

我正在使用 gnu 并行版本 20180722

【问题讨论】:

呃!您需要运行哪些参数 - 我的意思是它们在哪里? 为什么不在 Python 脚本的开头放置一个 shebang 并使其可执行,这样您就无需继续输入 python 来运行它? NVM - 我误解了如何使用并行。我刚刚编写了一个包装脚本来为我的程序生成带有所需参数的调用,然后将其通过管道传输到并行。它似乎正在工作:generate-runs.sh | parallel 在您的示例中,输出文件的名称相同。如果这是正确的,那么这将解释为什么它是空的。输出文件必须具有不同的名称。 【参考方案1】:

(这应该是一条注释,因为它没有回答实际问题,但格式化代码效果不佳)。

如果线条是这样的:

python /path/to/program/run.py A_02_01 input.fasta > /path/to/output/out.txt
python /path/to/program/run.py A_02_02 input.fasta > /path/to/output/out.txt

那么你也许可以这样做:

cat file-with-A_names |
  parallel --results /path/.out python /path/to/program/run.py  input.fasta >/dev/null

输出将存储在/path/A....out

【讨论】:

以上是关于gnu parallel --pipe 产生空输出文件的主要内容,如果未能解决你的问题,请参考以下文章

Gnu并行卡住了,没有输出

ERROR_BROKEN_PIPE 无法读取进程终止前产生的进程输出

GNU Parallel面向静默退出和无效选项错误

sh GNU Parallel + cUrl

GNU Parallel 面临静默退出和无效选项错误

GNU Parallel 与多个文件的 shellcheck