2012-04-24 3 views
1

Моя программа занимает 2 или 3 параметра командной строки:Командная строка запроса ошибок

-s необязательный параметр, указывающий переключатель в моей программе позже -infile является входной файл -outfile должен быть написанный файл

мне нужна программа для вывода сообщения об ошибке и выйти, если какой-либо из следующих действий происходит:

  • пользователь указывает входной_файл имя, которое не заканчивается .genes
  • специфика пользователь вводит выходной_файл имя, которое не заканчивается либо .fa или .fasta
  • пользователь предоставляет меньше 2, или более, чем 3, параметры
  • первый параметр пользователя начинается с тире, но не " -s'

Я написал:

def getGenes(spliced, infile, outfile): 
spliced = False 
if '-s' in sys.argv: 
    spliced = True 
    sys.argv.remove('-s') 
    infile, outfile = sys.argv[1:] 
if not infile.endswith('.genes'): 
    print('Incorrect input file type') 
    sys.exit(1) 
if not outfile.endswith('.fa' or '.fasta'): 
    print('Incorrect output file type') 
    sys.exit(1) 
if not 2 <= len(sys.argv) <= 3: 
    print('Command line parameters missing') 
    sys.exit(1) 
if sys.argv[1] != '-s': 
    print('Invalid parameter, if spliced, must be -s') 
    sys.exit(1) 

Однако, что-то конфликтует с некоторыми условными, включая первый и последний будучи противоречивым из-за того, что s.argv [1] всегда неравнодушным к '-s', потому что 's' были предсказуемыми nt в argv, он был удален ранее. Поэтому я не знаю, как написать это правильно ...

+0

Просто nitpicking, но ошибки должны быть отправлены на stderr. –

+0

Что такое 'stderr'? –

+0

'sys.argv.remove ('s')' 's' ->' -s', no? –

ответ

1

sliced=False не отступом

def getGenes(spliced, infile, outfile): 
    spliced = False 

sys.argv.remove('s') должно быть sys.argv.remove('-s')

два условия противоречат друг другу:

if '-s' in sys.argv: 
    spliced = True 
    sys.argv.remove('-s') # you removed '-s' from sys.argv ,so the below if condition becomes false 
    infile, outfile = sys.argv[1:] 

if sys.argv[1] != '-s': 
    print('Invalid parameter, if spliced, must be -s') 
    sys.exit(1) 

Отредактированная версия вашего кода:

import sys 

def getGenes(spliced, infile, outfile): 
spliced = False 
if '-s' in sys.argv: 
    spliced = True 
    infile, outfile = sys.argv[2:] 
if not infile.endswith('.genes'): 
    print('Incorrect input file type') 
    sys.exit(1) 
if not outfile.endswith('.fa' or '.fasta'): 
    print('Incorrect output file type') 
    sys.exit(1) 
if not 3 <= len(sys.argv) <= 4: 
    print('Command line parameters missing') 
    sys.exit(1) 
if sys.argv[1] != '-s': 
    print('Invalid parameter, if spliced, must be -s') 
    sys.exit(1) 
+0

Почему вы изменили 2 и 3 на 3 и 4 выше? –

+0

Да, потому что я не удалял '-s' из sys.srgv, так что теперь будет 4. –

+0

Спасибо тонну! Я думаю, это работает! –

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