2012-04-21 5 views
3

мне нужно создать программу под названием extractGenes.pyНеобязательный параметр Python?

командной строки параметры должны принять 2 или 3 параметра:

  1. -s является необязательным параметром, или переключатель, указывающий, что пользователь wwants сплайсированную последовательность генов (интроны удалены). Пользователь не должен предоставлять это (то есть он хочет всю последовательность генов), но он действительно обеспечивает его, то он должен быть первым параметром

  2. входной файл (с генами)

  3. выходной файл (где программа будет создавать для хранения файла Fasta

файл содержит такие строки:

NM_001003443 chr11 + 5925152 592608098 2 5925152,5925652, 5925404,5926898, 

Однако, я не конечно, как включить необязательный параметр -s в функцию запуска.

Так что я начал с:

getGenes(-s, input, output): 
fp = open(input, 'r') 
wp = open(output, "w") 

, но не уверен, о том, как включить -s.

ответ

3

Этот случай достаточно прост в использовании sys.argv непосредственно:

import sys 

spliced = False 
if '-s' in sys.argv: 
    spliced = True 
    sys.argv.remove('-s') 
infile, outfile = sys.argv[1:] 

В качестве альтернативы, вы можете также использовать более мощные инструменты, такие как argparse и optparse для создания командной строки парсер:

import argparse 

parser = argparse.ArgumentParser(description='Tool for extracting genes') 
parser.add_argument('infile', help='source file with the genes') 
parser.add_argument('outfile', help='outfile file in a FASTA format') 
parser.add_argument('-s', '--spliced', action='store_true', help='remove introns') 

if __name__ == '__main__': 
    result = parser.parse_args('-s myin myout'.split()) 
    print vars(result) 
+0

Это то, что я искал, спасибо за помощь! –

+0

С удовольствием помогите :-) –

+0

@ RaymondHettinger, очень приятно, я раньше не использовал argparse. Кстати, я видел ваши разговоры о лёгком AI в PyCon, и это было потрясающе. – zallarak

2

Argparse - это библиотека python, которая позаботится о дополнительных пареметрах для вас. http://docs.python.org/library/argparse.html#module-argparse

+0

I я новичок в python и не знаю, как включить argparse в программу. Я понимаю комментарий выше, но так как мне нужно, чтобы -s был первым параметром, я не понимаю, как сделать его условным ... –

+1

@PatrickCampbell - dm ответил, когда я вводил свой ответ, но мое решение использует именно то, библиотеку, которую он предложил (что действительно ** библиотека ** для использования в таких случаях ...) – mac

+0

Спасибо !!!!!! –

0

попробовать что-то вроде этого:

def getGenes(input, output, s=False): 
    if s: 
     ... 
    else: 
     ... 

Если вход 2 параметра, s будет Ложные; getGenes (вход, выход)

Если вы вызываете getGenes() с 3 параметрами, s будет 3-м параметром, поэтому в этом случае вызов его с любым значением False приведет к предложению else.

+0

Проблема в том, что по какой-либо причине параметр -s должен быть первым параметром –

+0

@PatrickCampbell Почему и почему порядок аргументов в командной строке должен отражать порядок аргументов некоторой функции в программе? – delnan

+0

Я действительно не знаю, почему порядок имеет значение, мне жаль, что мне не нужно было так поступать, но мне было поручено ... –

Смежные вопросы