我尝试在ruffus管道中使用Sailfish,它以多个fastq文件作为参数。我使用python中的subprocess模块执行Sailfish,但是subprocess调用中的<()
即使在我设置shell=True
时也不起作用。在
这是我想用python执行的命令:
sailfish quant [options] -1 <(cat sample1a.fastq sample1b.fastq) -2 <(cat sample2a.fastq sample2b.fastq) -o [output_file]
或者(最好):
^{pr2}$概括如下:
someprogram <(someprocess) <(someprocess)
我该如何用python来实现这一点呢?子流程是正确的方法吗?在
虽然J.F.Sebastian使用命名管道提供了一个答案,但是可以使用匿名管道来实现这一点。在
要模拟bash process substitution,请执行以下操作:
在Python中,可以使用命名管道:
^{pr2}$其中
named_pipes(n)
是:实现bash进程替换的另一种更可取的方法(无需在磁盘上创建命名条目)是使用} (^{}) creates entries for all file descriptors opened by the process 。要测试可用性,请运行:
/dev/fd/N
文件名(如果它们可用)作为suggested by @Dunes。在FreeBSD上,^{如果失败,请尝试将} ,就像在某些linux上那样:
/dev/fd
符号链接到^{下面是
/dev/fd
基于someprogram <(someprocess) <(anotherprocess)
bash命令的实现:注意:在我的Ubuntu机器上,
subprocess
代码只在python3.4+中工作,尽管pass_fds
在python3.2之后就可用了。在相关问题 更多 >
编程相关推荐