O que há de errado com este script python?

0

Eu tenho este código:

from sys import argv
import os
bold = "3[1m"
reset = "3[0;0m"

try:
    argv[1]
except IndexError:
    print("\nNo arguments! Add \"-h\" or \"--help\" for more info." + bold + "\n\nNow look what you've done!" + reset)
else:
    pass

if argv[1] == "-h" or "--help":
    print("\nxxxx, version 0.0.2")
    print("xxxx is a simple tool for the command line used for quickly saving\n\
chunks of text, while providing more functionality than the traditional method\n\
(e.g. echo \"HELLO WORLD\" > hi.txt) used in bash.")
    print("\nUsage: sans-sheriff [text] [directory] [options]")
    print("\nOptions:\n\
    -h, --help                Display this help message and exit.\n\
    -v, --verbose             Output more verbosity.\n\
    -e=utf8, --encoding       Sets the encoding. Default is utf-8.\n\
       utf16\n\
       utf32\n\
       ascii\n\
  iso (8859-1)\n\
-text                     Sets the filetype. Default is \".txt\".\n\
 html\n\
 rtf\n\
 tex\n\
-o, --open                Open the file directly after.\n\
\n\
e.g. xxxx \"Hello World\" /home/user/Documents/myfile -e=utf32")
else:
    try:
        argv[2]
    except IndexError:
        print("No directory argument! Add \"-h\" or \"--help\" fopr mor info." + bold + "\n\nNow look what you've done!" + reset)
    else:
        pass
    usrtxt = argv[1]
    usrdir = argv[2]
    usrtxt = open(usrdir, "w")

É suposto criar arquivos de texto com base nos argumentos de um usuário, assim:

xxxx \"Hello World\" /home/user/Documents/myfile

Mas sempre que é lançado como o exemplo fornecido, ele apenas carrega a saída que seria produzida quando -h ou --help é argumentado ... Não parece lógico o porquê disso, e eu também sou um novato em python, então qualquer ajuda seria muito apreciada!

    
por Marco Scannadinari 17.10.2012 / 19:41

1 resposta

8

Você está usando or incorretamente. A maneira correta de fazer isso no seu exemplo seria:

if argv[1] == "-h" or argv[1] == "--help":

Ou é um operador booleano que descreve o que fazer com duas comparações diferentes. Então, o que você forneceu seria como dizer

keep_going = False
if argv[1] == "-h":
    keep_going = True

if "--help":
    keep_going = True

O que não faz sentido. Tecnicamente, ter apenas or "--help" é True porque "--help" é uma sequência não vazia.

Além disso, graças ao Timo , você pode usar

if argv[1] in ("-h", "--help"):

Qual é considerado mais o modo Python

Por fim, você deve analisar assuntos como argparse para que o Python manipule adequadamente os argumentos nem sempre pode estar na mesma ordem.

No futuro, as perguntas estritamente relacionadas ao código são mais adequadas para o estouro de pilha , que provavelmente é mais adequado para perguntas de programação.

    
por Marco Ceppi 17.10.2012 / 19:51