我尝试使用python程序从bash自动化某些进程(对于RNA-seq),第一步是从* .fastq传递文件,如下所示
Demo_T3_L001_R1.fastq Demo_T3_L002_R1.fastq Demo_T3_L003_R1.fastq Demo_T3_L004_R1.fastq
Demo_T3_L001_R2.fastq Demo_T3_L002_R2.fastq Demo_T3_L003_R2.fastq Demo_T3_L004_R2.fastq
(文件的内容与我的问题无关,但我可以根据需要复制它们)
到* .fasta,像这样:
Demo_T3_L001_R1.fasta Demo_T3_L002_R1.fasta Demo_T3_L003_R1.fasta Demo_T3_L004_R1.fasta
Demo_T3_L001_R2.fasta Demo_T3_L002_R2.fasta Demo_T3_L003_R2.fasta Demo_T3_L004_R2.fasta
我有这个脚本:
import sys
import os
from os import listdir
from os.path import isfile, join
import subprocess
from subprocess import call
mypath = '/home/Python_test'
## Read only *.fastq files ##
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f)) if
f.endswith('.fastq')]
print("There are:", len(onlyfiles), "files.")
## Loop between the files found ##
for num in range (0,len(onlyfiles)):
## Command to do ##
cmd_input = ('sed','-n','1~4s/^@/>/p;2~4p',onlyfiles[num])
## Create names for otput files ##
cmd_output = onlyfiles[num].replace('fastq','fasta')
## Open file ##
sys.stdout = open(cmd_output, 'w')
## Print in file ##
print(call(cmd_input))
但我的问题是打印出现在终端上,所有文件只有一个' 0'运行脚本后,像这样
>>head *.fasta
==> Demo_T3_L001_R1.fasta <==
0
==> Demo_T3_L001_R2.fasta <==
0
==> Demo_T3_L002_R1.fasta <==
0
==> Demo_T3_L002_R2.fasta <==
0
==> Demo_T3_L003_R1.fasta <==
0
==> Demo_T3_L003_R2.fasta <==
0
==> Demo_T3_L004_R1.fasta <==
0
==> Demo_T3_L004_R2.fasta <==
0
我尝试过:
subprocess.Popen(cmd_input, stdout = cmd_output)
和subprocess.call,但都有错误:&#39; str&#39;对象没有属性&#39; fileno&#39;。
所以我问如何在相应的文件中正确写出输出,因为我无法弄明白。 我认为打印错误是因为呼叫在终端中发生并且打印没有明确的输入,因此假定为“0”。作为输出,它写入文件,但它只是一个假设。 提前谢谢。
答案 0 :(得分:0)
来自subprocess.call的文档:
运行args描述的命令。等待命令完成,然后返回returncode属性。
来自subprocess.check_output的文档:
使用参数运行命令并将其输出作为字节字符串返回。
返回代码为0
(成功),以便您打印的内容。如果你想获得命令的输出,请使用另一个函数。