2012-10-16 3 views
0

donc je suis encore en train de coder et même pas sûr si tout cela fonctionne encore, mais il est difficile de le tester quand je ne peux même pas le faire fonctionner. c'est la première fois en essayant d'avoir plusieurs entrées en option et chaque fois que je cours j'obtenir l'erreur:arguments optionnels de la ligne de commande

« erreur d'argument de ligne de commande: Argument « requête ». fichier n'est pas accessible:` sequence_filename ' »

l'entrée de ligne de commande est un nom de fichier (exigent), puis le fichier de sortie optionnel que la fonction sera capable et ensuite une variable facultative soit prot (si elle est une protéine, la defualt) ou na si elle est un acide nucléique

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) 

merci d'avance.

+0

Passez-vous le chemin complet de votre fichier? –

+0

no. c'est juste le nom de fichier (quelque chose.fa) qui est dans le même dossier que je travaille. Est-ce que c'est ce que vous vouliez dire? – user1714887

+2

Au lieu de 'if sys.argv> 3:' cela devrait être 'if len (sys.argv)> 3:' – halex

Répondre

4

Si vous faites une interface de ligne de commande compliquée, vous devez utiliser argparse, qui va analyser et rendre l'interface automatiquement en fonction des arguments que vous spécifiez.

Si vous exécutez python 2.6 ou version antérieure, vous pouvez utiliser optparse, l'ancien module qui a été remplacé par argparse.

+2

Même si vous ne faites pas une "sérieuse interface de ligne de commande", argparse est une bonne idée - c'est plus facile et moins sujet aux bugs. – JasonWyatt

+0

Pourtant, je ne l'utiliserais pas si je n'avais besoin que d'un script pour traiter un fichier que je spécifie sur argv [1], par exemple. Mais dès que vous obtenez des drapeaux et des arguments facultatifs, c'est bien sûr un besoin. – lolopop

+0

hélas je cours une version plus ancienne de python et argparse ne semble pas exister. quand je l'importe on m'en dit autant. – user1714887