Что не так с этим сценарием Python?

У меня есть этот код:

from sys import argv
import os
bold = "\033[1m"
reset = "\033[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")

Это, как предполагается, создает текстовые файлы на основе аргументы пользователей, как это:

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

Но каждый раз, когда это запускается как пример, если, это просто загружает вывод, который был бы произведен когда -h или --help обсужден... Не кажется логичным, почему это сделало бы это, и я - настоящий новичок к Python также, таким образом, любая справка значительно ценилась бы!

0
задан 17 October 2012 в 21:41

1 ответ

Вы используете or неправильно. Надлежащий способ сделать это в Вашем примере было бы:

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

Или булев оператор, который описывает, что сделать с двумя различными сравнениями. Таким образом, то, что Вы обеспечили, было бы похоже на высказывание

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

if "--help":
    keep_going = True

Который не имеет смысла. Технически просто наличие or "--help" True потому что "--help" непустая строка.

Кроме того, благодаря Timo, Вы могли использовать

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

Который считают больше Python путем

Наконец, необходимо заглядывать к вещам как argparse для Python для надлежащей обработки аргументов, поскольку они не могут всегда быть в том же порядке.

В будущем вопросы строго относительно кода лучше подходят для Переполнения стека, которое, вероятно, лучше подходит для программирования вопросов.

8
ответ дан 17 October 2012 в 21:41

Другие вопросы по тегам:

Похожие вопросы: