#python #input #pycharm #definition #argv
#python #ввод #pycharm #определение #argv
Вопрос:
У меня есть скрипт на python, подобный приведенному ниже, который я пытался запустить в оболочке. Я хочу использовать либо argv
или input
, чтобы предоставить конкретные входные данные с именами index1 и index2 ( ACCGTCG
и TTCCAGC
) и имя файла для обработки. Я попробовал два способа (с sys.argv и вводом отдельно), как показано ниже, но я не получаю никаких результатов.
С помощью sys.argv:
#!/usr/bin/python
import sys
from Bio import SeqIO
def dual_index_positions():
script=sys.argv[0]
index1=sys.argv[1]
index2=sys.argv[2]
input_file=sys.argv[3]
count=0
with open(input_file, "r") as Fastq:
for record in SeqIO.parse(Fastq,'fastq'):
if index1 in record.seq and index2 in record.seq:
print(record.name)
ind1_rec=record.seq.find(index1)
ind2_rec=record.seq.find(index2)
rp_ind2=ind2_rec len(index2)
dist=(ind1_rec)-(rp_ind2)
print('Index1 and index2 positions are ' str(ind1_rec 1) ' and ' str(ind2_rec 1) ' respectively'
'; distance is: ' str(dist))
count =1
print('The total number of hits is: ' str(count))
if __name__ == '__dual_index_positions__':
dual_index_positions()
с получением входных данных:
#!/usr/bin/python
from Bio import SeqIO
def dual_index_positions():
input_file=input('please enter your input_file: ')
index1=str(input('please enter your index 1: '))
index2=str(input('please enter your index 2: '))
count=0
with open(input_file, "r") as Fastq:
for record in SeqIO.parse(Fastq,'fastq'):
if index1 in record.seq and index2 in record.seq:
print(record.name)
ind1_rec=record.seq.find(index1)
ind2_rec=record.seq.find(index2)
rp_ind2=ind2_rec len(index2)
dist=(ind1_rec)-(rp_ind2)
print('Index1 and index2 positions are ' str(ind1_rec 1) ' and ' str(ind2_rec 1) ' respectively'
'; distance is: ' str(dist))
count =1
print('The total number of hits is: ' str(count))
if __name__ == '__dual_index_positions__':
dual_index_positions()
Может ли кто-нибудь помочь мне с этим, чтобы найти, где ошибка? Заранее благодарю вас.
Комментарии:
1. что вы подразумеваете под «я не получаю выходных данных»?
2.
if __name__ == '__dual_index_positions__':
обычноif __name__ == '__main__':
вы не используете там имя файла, если запускаете его напрямую3. Я запускаю код с помощью оболочки, но ничего не обрабатывается и не печатается.
Ответ №1:
Вместо этого
if __name__ == '__dual_index_positions__':
dual_index_positions()
Используйте это
if __name__ == '__main__':
dual_index_positions()
__name__ == '__dual_index_positions__'
это не имя функции, которую вы должны вызвать, это имя модуля, и по умолчанию оно имеет значение __main__