Как мне сделать программу командной строки, которая принимает аргументы?

1

Как я могу создать командную строку, поэтому я могу выполнить свою программу в Windows с некоторыми параметрами...

Например:

C:/Program/App.exe -safemode
Теги:
command-line

9 ответов

9

посмотрите getopt и optparse из стандартного lib, многие хорошие вещи можно было бы также сказать о более продвинутом argparse.

Как правило, вам просто нужно получить доступ к sys.argv.

7

Я чувствую, что вы также хотите сгенерировать "исполняемый файл", который вы можете использовать автономно... Для этого вы используете py2exe

Вот полный example.py:

import optparse

parser = optparse.OptionParser()

parser.add_option("-s", "--safemode",
                  default = False,
                  action = "store_true",
                  help = "Should program run in safe mode?")

parser.add_option("-w", "--width",
                  type = "int",
                  default = 1024,
                  help = "Desired screen width in pixels")

options, arguments = parser.parse_args()

if options.safemode:
    print "Proceeding safely"
else:
    print "Proceeding dangerously"

if options.width == 1024:
    print "running in 1024-pixel mode"
elif options.width == 1920:
    print "running in 1920-pixel mode"

И вот полный setup.py, который превратит приведенный выше example.py в example.exe (в подкаталог dist):

from distutils.core import setup
import py2exe
import sys

sys.argv.append('py2exe')

setup(
    options = {'py2exe': dict(bundle_files=1, optimize=2)},
    console = ["example.py"],
    zipfile = None,
    )
  • 0
    но где внутри add_option я помещаю свой источник в эту опцию?
  • 0
    options, arguments = parser.parse_args() поместят флаги для всех вариантов в переменные options .... то это до вас , чтобы написать , if или независимо от того, что проверяет эти флаги и запускает код , который вы хотите. ( Технически вы можете предоставить функцию для парсера опций, но я думаю, что это легче понять, если вы просто используете ее для разбора и установки флагов)
Показать ещё 5 комментариев
3

Вы говорите о параметре, переданном на python script?

'couse вы можете получить к ним доступ с помощью

import sys
print sys.argv

Или можно использовать более сложный getopt модуль.

2

Не парень-питон (но все равно), но мой Google-fu нашел это, предполагая, что вы имели в виду "обработку аргументов командной строки":
http://www.faqs.org/docs/diveintopython/kgp_commandline.html

  • 2
    FWIW, я знаю, что это не очень хороший ответ, но он демонстрирует, как просто разобраться в этом самостоятельно.
2

Используйте optparse.OptionParser.

from optparse import OptionParser
import sys

def make_cli_parser():
    """Makes the parser for the command line interface."""
    usage = "python %prog [OPTIONS]"
    cli_parser = OptionParser(usage)
    cli_parser.add_option('-s', '--safemode', action='store_true',
            help="Run in safe mode")
    return cli_parser

def main(argv):
    cli_parser = make_cli_parser()
    opts, args = cli_parser.parse_args(argv)
    if opts.safemode:
        print "Running in safe mode."
    else:
        print "Running with the devil."


if __name__ == '__main__':
    main(sys.argv[1:])

При использовании:

$ python opt.py
Running with the devil.
$ python opt.py -s
Running in safe mode.
$ python opt.py -h

Usage: python opt.py [OPTIONS]
Options:
  -h, --help      show this help message and exit
  -s, --safemode  Run in safe mode
  • 0
    не могли бы вы привести более простой пример? = р
0

Один из многих способов:

import sys
print sys.argv

>>>python arg.py arg1 arg2
['arg.py', 'arg1', 'arg2']



sys.argv - это список, содержащий все аргументы (также имя script/program) как строку.

0

Вы задаете вопрос с несколькими ответами.

Во-первых, командная строка передается в массив sys.argv. argv - это историческое имя из языков C и Unix. Итак:

~/p$ cat > args.py
import sys
print "You have ", len(sys.argv), "arguments."
for i in range(len(sys.argv)):
print "argv[", i, "] = ", sys.argv[i]

~/p$ python args.py 34 2 2 2
You have  5 arguments.
argv[ 0 ] =  args.py
argv[ 1 ] =  34
argv[ 2 ] =  2
argv[ 3 ] =  2
argv[ 4 ] =  2

Это работает как в MS Windows, так и в Unix.

Во-вторых, вы можете спросить: "Как мне получить хорошие аргументы? MS Windows или --help в Linux? "

Ну, есть три варианта, которые пытаются сделать то, что вы хотите. Два, optparse и getopt являются уже в стандартной библиотеке, а argparse уже в пути. Все три из них - библиотеки, которые начинаются с массива строк sys.argv, описание аргументов командной строки и возвращают какую-то структуру данных или класс, из которых вы можете получить варианты, которые вы имеете в виду.

  • getopt выполняет минимальную работу. Он не предоставляет "/help" или "--help".
  • optparse выполняет более детальную работу. Он предоставляет "/help" и как короткие, так и длинные варианты вариантов, например, "-v" и "--verbose".
  • argparse обрабатывает кухонную раковину, включая "/help", короткие и длинные команды, а также структуры подкоманд, как вы видите в исходном управлении "git add....", и позиционные аргументы.

Когда вы переходите к более сильному разбору, вам нужно дать парсеру более подробную информацию о том, что вы хотите аргументы командной строки. Например, вам нужно передать длинную письменную описание аргумента, если вы хотите, чтобы аргумент -help напечатал его.

В-третьих, вы можете попросить инструмент, который просто имеет дело с параметрами из команды строка, переменные среды и файлы конфигурации. В настоящее время Python имеет отдельные инструменты для каждого из них. Возможно, я напишу унифицированный, вам понадобятся: - аргументы командной строки, обработанные argparse, или getopt и т.д. - переменные среды, от os.environ [] - Конфигурационные файлы из ConfigFile или plistlib и т.д. и постройте свой собственный ответ на "какие настройки"?

Надеюсь, что это полностью ответит на ваши вопросы.

0

Или вы просто спрашиваете, как открыть командную строку?

перейдите в меню "Пуск", нажмите "Запустить" (или просто введите в Windows 7), введите "cmd"

Это откроет командную оболочку. Учитывая, что на ваш вопрос помечен python, я не уверен, что он будет скомпилирован в exe, вам, возможно, придется ввести "python (ваш источник здесь).py -safemode".

0

Другие комментарии касались того, как обрабатывать параметры. Если вы хотите сделать свою программу python exe, вы можете посмотреть py2exe.

Это не требуется, но вы упомянули App.exe, а не App.py

Ещё вопросы

Сообщество Overcoder
Наверх
Меню