Как мне сделать программу командной строки, которая принимает аргументы? - PullRequest
1 голос
/ 25 февраля 2010

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

Например:

C:/Program/App.exe -safemode

Ответы [ 9 ]

9 голосов
/ 25 февраля 2010

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

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

7 голосов
/ 25 февраля 2010

Я чувствую, что вы также хотите сгенерировать «исполняемый файл», который вы можете запустить автономно .... Для этого вы используете 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,
    )
3 голосов
/ 25 февраля 2010

Вы говорите о параметре, передаваемом скрипту Python?

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

import sys
print sys.argv

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

2 голосов
/ 25 февраля 2010

Использование 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
2 голосов
/ 25 февраля 2010

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

0 голосов
/ 25 февраля 2010

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

import sys
print sys.argv

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



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

0 голосов
/ 25 февраля 2010

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

Сначала командная строка передается в массив sys.argv. argv - это историческое имя из языков Си и 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 выполняет более детальную работу. Предоставляет "/ помощь" и короткую и длинную версии опций, например, "-v" и "--verbose".
  • argparse обрабатывает кухонную раковину, включая «/ help», короткие и длинные команды, а также структуры подкоманд, как вы видите в управлении исходным кодом "git add ....", и позиционные аргументы.

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

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

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

0 голосов
/ 25 февраля 2010

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

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

0 голосов
/ 25 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...