2012-10-16 111 views
0

所以我仍然编码,甚至不能确定如果这一切都有效,但当我甚至无法运行它时很难测试它。这是我第一次尝试有多个可选的输入和每次运行它的时候我得到的错误:命令行可选参数

“命令行参数错误:参数‘查询’。文件是不可访问:`sequence_filename'”

命令行输入是一个文件名(require),然后是函数将运行的可选输出文件,然后是任意一个prot(如果它是蛋白质,defualt)的可选变量,或者如果它是核酸,则为na。

if __name__ == '__main__': 
    sequence_filename = sys.argv[1] 
    output_filename = '' 
    if sys.argv > 3: 
     output_filename = sys.argv[2] 
     if sys.argv[3] == 'na': 
      input = 'na' 
     else: 
      input = 'prot' 
    elif sys.argv > 2: 
     output_filename = sys.argv[2] 

    main(sequence_filename, output_filename, input) 

在此先感谢。

+0

您是否传递文件的完整路径? –

+0

没有。它只是在我工作的同一个文件夹中的文件名(something.fa)。那是你的意思吗? – user1714887

+2

而不是'if sys.argv> 3:'它应该是'如果len(sys.argv)> 3:' – halex

回答

4

如果您正在执行复杂的命令行界面,您应该使用argparse,它将根据您指定的参数自动解析和创建界面。

如果您运行的是python 2.6或更旧版本,则可以使用optparse,旧版模块被替换为​​。

+2

即使你没有做一个“严重的命令行界面”,argparse也是个好主意 - 它更容易,并且更容易出错。 – JasonWyatt

+0

不过,如果我只需要一个脚本来处理我在argv [1]上指定的文件,我就不会使用它。但只要你得到标志和可选的参数,这当然是一个需要。 – lolopop

+0

唉我运行一个较旧版本的python和argparse似乎并不存在。当我导入它时,我被告知一样多。 – user1714887