Python sys.argv и комбинация ввода с определением НЕ работают

#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__