命令行提示错误

时间:2012-04-24 21:08:40

标签: python command-line conditional

我的程序需要2或3个命令行参数:

-s是一个可选参数,表示稍后程序中的开关 -infile是文件输入 -outfile是写文件

我需要程序打印错误消息,如果发生以下任何情况,请退出:

  • 用户指定不以.genes
  • 结尾的infile名称
  • 用户详细说明了一个不以.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'存在于argv中,它早先被删除了。所以我不确定如何正确地写这个......

1 个答案:

答案 0 :(得分: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)