多文件stdin使用subprocess.callPython(蝴蝶结)

2024-09-28 21:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用subprocess.call脚本的python运算符。 我必须多次运行管道程序(bowtie),然后以不同的方式使用输出。为此,我使用subprocess.call. 在

问题是bowtie接受输入2文件,一个索引和一个文本文件,我不能将它们都赋给stdin参数。在

我也尝试在args中包含指向索引的路径,但当然,bowtie不将其识别为索引,并给我一个错误。既然这个指标总是一样的,有没有办法避免这个问题呢?在

以下是我正在编写的部分代码(非常原始):

inpath  = "/media/2tbhd/workdata/nanocage_noadapt/zf/fasta/zf_ad_c_r2.fasta"
ind_path = "indexes/zf_gen_topl"
for elem in plist:
        cmd = subprocess.call(["bowtie","-f","-v 3", "--best" "--suppress 6,7" "-p 6"], shell = True, stdin = inpath, ind_path)

Tags: 文件path程序脚本管道stdin方式运算符
2条回答

我对bowtie一无所知,但我觉得你的电话应该是这样的:

cmd = subprocess.call(['bowtie','-f',inpath,'-v','3', ' best',' suppress','6,7','-p','6',ind_path])

通常,将参数列表传递给子进程,就像在命令行中那样。如果知道命令行是什么样子的,就可以使用奇妙的shlex模块来拆分命令。e、 g.:

^{pr2}$

如果您的输入文件实际上是一个文件(在您的示例中是这样的),而不是来自其他进程的管道数据,我认为您不应该在subprocess.call完全发挥作用!
据我所知,不能通过STDIN向普通命令行bowtie提供索引-它必须是一个文件。所以这肯定需要一个正常的论点,而不是来自STDIN。在

这是我通常从脚本调用bowtie的方式(输入文件和索引都是文件,不使用STDIN):

subprocess.call(["bowtie %s %s %s %s"(full_options,indexname,infile,outfile)], 
                shell=True)

其中full_options类似于'-f -m1 -v1 best tryhard -S sam-nosq',而{}则类似于{}(这是一组索引文件名的基名,格式为Chlre4nm_case\unew_m.*.ebwt,位于shell环境变量$BOWTIE_INDEXES给出的目录中,这是bowtie检测其索引文件的方式)。在

我知道我可能在用subprocess.call很糟糕,应该把我的命令/options/args拆分成一个列表,就像在另一个答案中一样-这是旧代码,但它确实有效。在

相关问题 更多 >