python信息传送管道_通过echo管道将python变量(字符串)传递给bash命令

我无法在python(python变量)中传递一个字符串作为命令行(bash)上的序列对齐程序(muscle)的输入。 muscle可以从命令行获取stdin,例如;

~# echo -e ">1\nATTTCTCT\n>2\nATTTCTCC" | muscle

MUSCLE v3.8.31 by Robert C. Edgar

http://www.drive5.com/muscle

This software is donated to the public domain.

Please cite: Edgar, R.C. Nucleic Acids Res 32(5), 1792-97.

- 2 seqs, max length 8, avg length 8

00:00:00 22 MB(2%) Iter 1 100.00% K-mer dist pass 1

00:00:00 22 MB(2%) Iter 1 100.00% K-mer dist pass 2

00:00:00 23 MB(2%) Iter 1 100.00% Align node

00:00:00 23 MB(2%) Iter 1 100.00% Root alignment

>1

ATTTCTCT

>2

ATTTCTCC

我正在进行的这个fasta对齐(最后4行) - 您可以重定向肌肉的输出(echo -e ">1\nATTTCTCT\n>2\nATTTCTCC" | muscle > out.file以获得我需要进行下游处理的fasta对齐。请到达那里,我必须传递'肌肉'FASTA序列字符串,我认为最好通过bash中的echo完成。

因此,该脚本需要两个multiFASTA文件,并根据每个文件的ID列表配对每个FASTA序列 - 这是有效的(虽然我意识到它可能不是最有效的方法 - 我是新的python用户)。然后我需要在计算距离/差异之前对齐muscle中的每个集合。

这是我到目前为止所做的:

#! /env/python

from pairwise_distances import K2Pdistance

import pairwise_distances

import subprocess

from subprocess import call

import os

fasta1=['']

for line in open('test1.fasta'):

if not line.startswith('>'):

fasta1.append(line.strip())

fasta2=['']

for line in open('test2.fasta'):

if not line.startswith('>'):

fasta2.append(line.strip())

for l1, l2 in zip(open('test1.list'), open ('test2.list')):

try:

a=fasta1[int(l1)]

except IndexError,e:

a="GGG"

try:

b=fasta2[int(l2)]

except (IndexError):

b="CCC"

temp_align=str(">1"+'\n'+a+'\n'+">2"+'\n'+b)

first=subprocess.check_output(['echo','-e',temp_align])

print first

subprocess.call(['bash','muscle'], stdin=first.stdout)

print second

#new=K2Pdistance(outfast1,outfast2)

#subprocess.Popen(['bash','muscle'], stdin=subprocess.check_output(['echo','-e',temp_align], stdout=subprocess.PIPE).std.out)`

'temp_align'变量是我想要传递给肌肉的 - 它是每个multiFASTA文件中相应的fasta序列组合的结果,对于每个循环都在ids /列表上,并且格式化为FASTA文件。

这个问题是我可以echo FASTA字符串,但我似乎无法“管道”通过stdin到肌肉...我得到的主要错误是:AttributeError: 'str' object has no attribute 'stdout'。

~#python Beta3.py

>1

ATCGACTACT

>2

ATCGCGCTACT

Traceback (most recent call last):

File "Beta3.py", line 38, in

subprocess.call(['bash','muscle'], stdin=first.stdout)

AttributeError: 'str' object has no attribute 'stdout'

子进程或其他命令行模块可以将字符串作为stdin吗?如果没有,我不知道我怎么能回声,然后管成肌肉......

任何其他想法将不胜感激。我尝试了这个帖子unix.stackexchange中的一些选项

但没有运气。

编辑:以下是一些示例文件:

~# cat test1.fasta

>1

ATCGACTACT

>2

ACTCAGTCA

>3

TTCACAGGG

~# cat test2.fasta

>1

ATCGCGCTACT

>2

GGCGTCAGTCA

>3

TTCAACCCCAGGG

~# cat test1.list

1

2

3

~# cat test2.list

1

3

2

编辑2:上一篇文章是相关的,但我的问题是关于从一个字符串的python变量开始链接两个bash命令...然后,理想情况下,将第二个命令的stdout捕获回python变量...我不太明白如何将该帖子的答案翻译成我特定问题的解决方案......我想我不会完全理解这张海报试图做的事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值