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 产生空输出文件的主要内容,如果未能解决你的问题,请参考以下文章