Dav*_*son 4 linux pipe grid-computing qsub sungridengine
我想在网格上使用需要使用pipe(|)或redirect(>)的qsub(SGE 8.1.3,CentOS 5.9)运行一些命令.例如,假设我必须并行化命令
echo 'hello world' > hello.txt
Run Code Online (Sandbox Code Playgroud)
(显然,一个简单的例子:在现实中我可能需要一个程序的输出重定向像领结直接samtools).如果我做了:
qsub echo 'hello world' > hello.txt
Run Code Online (Sandbox Code Playgroud)
结果的内容hello.txt看起来像
Your job 123454321 ("echo") has been submitted
Run Code Online (Sandbox Code Playgroud)
类似地,如果我使用了pipe(echo "hello world" | myprogram),那么该消息将被传递给所有,而myprogram不是实际的stdout.
我知道我可以编写一个小的bash脚本,每个脚本包含带有管道/重定向的命令,然后执行qsub ./myscript.sh.但是,我正在尝试使用脚本同时运行许多并行化作业,因此我必须编写许多这样的bash脚本,每个脚本的命令略有不同.编写脚本时,此解决方案可能会开始变得非常hackish.Python中这样一个脚本的一个例子:
for i, (infile1, infile2, outfile) in enumerate(files):
command = ("bowtie -S %s %s | " +
"samtools view -bS - > %s\n") % (infile1, infile2, outfile)
script = "job" + str(counter) + ".sh"
open(script, "w").write(command)
os.system("chmod 755 %s" % script)
os.system("qsub -cwd ./%s" % script)
Run Code Online (Sandbox Code Playgroud)
这有点令人沮丧,原因有几个,其中我的程序甚至不能删除jobXX.sh后面的许多脚本来清理它自己,因为我不知道作业在队列中等待多长时间,并且脚本必须在工作开始时就在那里.
有没有办法向echo 'hello world' > hello.txtqsub 提供我的完整命令,而无需创建包含该命令的另一个文件?
您可以通过将其转换为bash -c命令来执行此操作,该命令允许您将|引号括起来:
qsub bash -c "cmd <options> | cmd2 <options>"
Run Code Online (Sandbox Code Playgroud)
正如@spuder在评论中指出的那样,似乎在qsub的其他版本(不是我正在使用的SGE 8.1.3)中,可以用以下方法解决问题:
echo "cmd <options> | cmd2 <options>" | qsub
Run Code Online (Sandbox Code Playgroud)
同样.
| 归档时间: |
|
| 查看次数: |
7079 次 |
| 最近记录: |