嘿我正在更新我的脚本,我现在已经将os更改为子进程,但我不知道如何检查输出?我想检查它是空的还是它的内容。脚本只是执行其他程序或句子列表。
"""
Created on Sun Jan 8 18:52:57 2017
@author: MarcGrad
"""
import sys
import subprocess
syntax = '''
------------------------------------------------------------------------------------
Syntax: python find_by_sentence.py *file1.txt
*List of sentences (column of)
------------------------------------------------------------------------------------
'''
if len(sys.argv) != 1:
print(syntax)
sys.exit()
open_file = open(sys.argv[1],'r')
list_of_sentences = []
for sent in open_file:
list_of_sentences.append(sent.rstrip())
counter = 0
for word in list_of_sentences:
counter += 1
print(counter,word)
subprocess.check_output("esearch -db protein -query %s | efetch -format fasta >> results_seq.txt" % (word), shell = True)
print('done :)')
open_file.close()
答案 0 :(得分:1)
当你启动一个过程时,它会自动打开3个文件描述符(你可以在单向通信通道上看它):
STDIN
- 用于来自用户的输入(例如,在输入密码到SSH时使用)STDOUT
- 用作应用程序标准输出的文本(例如在控制台上打印消息的频道)STDERR
- 与STDOUT相同,但用于错误消息。您可以将输出(也是输入,但不适用于您的问题)重定向到文件(换句话说,您“断开”控制台并“连接”文件)。对于重定向,请指定这些符号:>
和>>
(有关详细信息,请查看https://unix.stackexchange.com/questions/171025/what-does-do-vs)。命令ls -l >> file.txt
将写出ls -l
的输出并在控制台上写任何内容(因为它是“断开连接”)
result = subprocess.check_output(...)
接受命令并将其STDOUT
“连接”到result
变量中。但是您正在运行此命令:esearch -db protein -query %s | efetch -format fasta >> results_seq.txt
如果您查看结尾,则会看到>> results_seq.txt
。因此,您的命令输出已“连接”到文件results_seq.txt
中,无法保存在result
变量中。
现在您可以使用这些方法:
按原样运行命令,然后打开文件results_seq.txt
并查看内容
subprocess.check_output("esearch -db protein -query %s | efetch -format fasta >> results_seq.txt" % (word), shell = True)
with open("results_seq.txt", "r") as f:
result = f.read()
不要在命令中使用重定向并将其保存在Python中:
result = subprocess.check_output("esearch -db protein -query %s | efetch -format fasta" % (word), shell = True)
with open("results_seq.txt", "wb") as f:
f.write(result)
使用tee
实用程序允许将输出重定向到文件并将其保留在控制台上
result = subprocess.check_output("esearch -db protein -query %s | efetch -format fasta | tee -a results_seq.txt" % (word), shell = True)
在任何这些示例的末尾,您将保存保存在变量result