Python как запустить программу с параметрами

Три способа передачи параметров при запуске скриптов Python в командной строке

Три общих пути

Если вам нужно передать некоторые параметры при запуске скрипта python, такие как gpus и batch_size, вы можете использовать следующие три метода.

python script.py 0,1,2 10 python script.py -gpus=0,1,2 —batch-size=10 python script.py -gpus=0,1,2 —batch_size=10

Эти три формата соответствуют различным методам синтаксического анализа параметров, а именно sys.argv, argparse и tf.app.run. Первые два являются встроенными функциями python, а последний — удобным способом, предоставляемым tenorflow.

sys.argv

Модуль sys — очень часто используемый модуль. Он инкапсулирует данные, связанные с интерпретатором python. Например, sys.modules содержит информацию обо всех загруженных модулях, sys.path содержит содержимое PYTHONPATH, а sys.argv инкапсулирует передачу Введены данные параметра. Чтобы
Используйте sys.argv для получения параметров, содержащихся в первой команде выше, следующим образом:

Передача параметров в скрипт Python


import sys gpus = sys.argv[1] #gpus = [int(gpus.split(‘,’))] batch_size = sys.argv[2] print gpus print batch_size

argparse

import argparse parser = argparse.ArgumentParser(description=’manual to this script’) parser.add_argument(‘—gpus’, type=str, default = None) parser.add_argument(‘—batch-size’, type=int, default=32) args = parser.parse_args() print args.gpus print args.batch_size

Следует отметить, что —batch-size в команде запуска скрипта python script.py -gpus = 0,1,2 —batch-size = 10 будет автоматически преобразован в batch_size.
Параметр типа метода parser.add_argument теоретически может быть любым допустимым типом, но некоторые параметры сложнее передать в формате, например list, поэтому они обычно используют bool, int, str, float и т. д. Тип подходит, а более сложные требования можно передать через str, а затем проанализировать вручную. Разбор типа bool является особенным, любое переданное значение будет проанализировано как True, а нулевое значение будет передано как False

python script.py —bool-val=0 # args.bool_val=True python script.py —bool-val=False # args.bool_val=True python script.py —bool-val = # args.bool_val = Ничего не писать Ложь

Этот метод также может указывать справочную информацию о команде. Подробности см. В документации по API: https://docs.python.org/2/library/argparse.html

tf.app.run

tenorflow также предоставляет удобный способ синтаксического анализа. Чтобы
Команда выполнения сценария:

python script.py -gpus=0,1,2 —batch_size=10

Соответствующий код на Python:

import tensorflow as tf tf.app.flags.DEFINE_string(‘gpus’, None, ‘gpus to use’) tf.app.flags.DEFINE_integer(‘batch_size’, 5, ‘batch size’) FLAGS = tf.app.flags.FLAGS def main(_): print FLAGS.gpus print FLAGS.batch_size if __name__==»__main__»: tf.app.run()

Следует отметить несколько моментов:

tensorflow предоставляет только следующие методы:

Как передавать параметры в Python-скрипты | Базовый курс. Программирование на Python.


tf.app.flags.DEFINE_string,
tf.app.flags.DEFINE_integer,
tf.app.flags.DEFINE_boolean,
tf.app.flags.DEFINE_float Четыре метода, соответствующие параметрам типа str, int, bool, float. Синтаксический анализ bool здесь строгий: передача 1 будет анализироваться как True, а любые другие значения будут проанализированы как False.
Сценарий должен определить основной метод, который получает параметр: def main (_) :, передаваемый параметр — это имя сценария, которое обычно не используется, поэтому оно принимается с подчеркиванием.
В качестве примера возьмем параметр batch_size. Имя, используемое при передаче в этом параметре, —batch_size, что означает, что подчеркивание не будет анализироваться на символы подчеркивания, как в argparse.
tf.app.run () найдет и выполнит основной метод сценария входа. Только после выполнения tf.app.run () можно получить параметры из FLAGS. Чтобы
Судя по его сигнатуре, он также может указать метод, который будет выполняться сам по себе, не обязательно с именем main:

Читайте также:
Какой программой открыть 3dm

Источник: russianblogs.com

how to run an exe file with the arguments using python

Suppose I have a file RegressionSystem.exe . I want to execute this executable with a -config argument. The commandline should be like:

RegressionSystem.exe -config filename
I have tried like:
regression_exe_path = os.path.join(get_path_for_regression,’Debug’,’RegressionSystem.exe’) config = os.path.join(get_path_for_regression,’config.ini’) subprocess.Popen(args=[regression_exe_path,’-config’, config])
but it didn’t work.
1.0m 295 295 gold badges 4036 4036 silver badges 3329 3329 bronze badges
asked Apr 10, 2013 at 14:40
499 3 3 gold badges 8 8 silver badges 18 18 bronze badges
It didn’t work how? What’s the error message?
Apr 10, 2013 at 14:44

5 Answers 5

You can also use subprocess.call() if you want. For example,

import subprocess FNULL = open(os.devnull, ‘w’) #use this if you want to suppress output to stdout from the subprocess filename = «my_file.dat» args = «RegressionSystem.exe -config » + filename subprocess.call(args, stdout=FNULL, stderr=FNULL, shell=False)

The difference between call and Popen is basically that call is blocking while Popen is not, with Popen providing more general functionality. Usually call is fine for most purposes, it is essentially a convenient form of Popen . You can read more at this question.

1 1 1 silver badge
answered Apr 10, 2013 at 15:10
11.8k 9 9 gold badges 45 45 silver badges 49 49 bronze badges
Dec 29, 2022 at 12:08

For anyone else finding this you can now use subprocess.run() . Here is an example:

import subprocess subprocess.run([«RegressionSystem.exe», «-config filename»])

The arguments can also be sent as a string instead, but you’ll need to set shell=True . The official documentation can be found here.

22.9k 25 25 gold badges 108 108 silver badges 194 194 bronze badges
answered Apr 10, 2019 at 20:28
Daniel Butler Daniel Butler
3,139 2 2 gold badges 23 23 silver badges 37 37 bronze badges

And again, the documentation is crap. Do we really need to pass «-config filename» or is it «-config», «filename» ? Calling the executable an argument does not really make sense either.

Feb 20 at 8:20

os.system(«/path/to/exe/RegressionSystem.exe -config «+str(config)+» filename»)
answered Apr 10, 2013 at 15:00
187 2 2 silver badges 9 9 bronze badges

os.system appears to block. That is, not return until the exe has run to completion. That is a noteworthy feature/constraint of this propose solution.

Sep 17, 2019 at 5:07

Here i wanna offer a good example. In the following, I got the argument count of current program then append them in an array as argProgram = [] . Finally i called subprocess.call(argProgram) to pass them wholly and directly :

Читайте также:
Подсоединиться к интернету установить программу загрузить файл

import subprocess import sys argProgram = [] if __name__ == «__main__»: # Get arguments from input argCount = len(sys.argv) # Parse arguments for i in range(1, argCount): argProgram.append(sys.argv[i]) # Finally run the prepared command subprocess.call(argProgram)

In this code i supposed to run an executable application named `Bit7z.exe» :

python Bit7zt.py Bit7zt.exe -e 1.zip -o extract_folder

Notice : I used of for i in range(1, argCount): statement because i dont need the first argument.

Источник: stackoverflow.com

Аргументы командной строки Python

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

Предоставляемый модуль getopt, может анализировать параметры и аргументы командной строки Python.

Как происходит передача аргументов командной строки Python?

Команда ls часто используется для получения сводной информации о файлах и папках, находящихся в определенном каталоге.

Зачем использовать argparse?

Для общения между автором программы и пользователем, которое не требует углубления в код и внесения изменений в сценарий. Модуль предоставляет пользователю возможность вводить аргументы командной строки.

Доступ к аргументам командной строки

Модуль Python sys предоставляет доступ к аргументам командной строки через sys.argv. Он решает две задачи:

Модуль Python sys

Это базовый модуль, который с самого начала поставлялся с дистрибутивом Python. Это тот же подход, что и библиотека C, использующая argc / argv для доступа к аргументам. Модуль sys реализует аргументы командной строки в простой структуре списка с именем sys.argv.

Каждый элемент списка представляет собой единственный аргумент. Первый – sys.argv [0] – это имя скрипта Python. Другие элементы списка от sys.argv [1] до sys.argv [n] – аргументы командной строки от 2 до n. В качестве разделителя между аргументами используется пробел. Соответственно, значения аргументов, содержащие пробелы, должны быть заключены в кавычки.

Он хранит аргументы командной строки в списке; мы можем получить к нему доступ, используя sys.argv. Это очень полезный и простой способ читать аргументы командной строки как String.

import sys print(type(sys.argv)) print(‘The command line arguments are:’) for i in sys.argv: print(i)

Модуль Python getopt

Модуль Python getopt расширяет разделение входной строки проверкой параметров. Основанный на функции getopt C, он позволяет использовать как короткие, так и длинные варианты, включая присвоение значений.

Очень похож на функцию C getopt() для анализа параметров командной строки. Полезен при анализе аргументов командной строки, когда мы хотим, чтобы пользователь ввел некоторые параметры.

import getopt import sys argv = sys.argv[1:] try: opts, args = getopt.getopt(argv, ‘hm:d’, [‘help’, ‘my_file=’]) print(opts) print(args) except getopt.GetoptError: # Print a message or do something useful print(‘Something went wrong!’) sys.exit(2)

Модуль Python argparse

Предлагает интерфейс командной строки со стандартизованным выводом, тогда как первые два решения оставляют большую часть работы в ваших руках. argparse позволяет проверять фиксированные и необязательные аргументы с проверкой имени в стиле UNIX или GNU.

Читайте также:
В какой программе рисовать развертки стен

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

Упрощает написание удобных интерфейсов командной строки. Он автоматически генерирует справочные сообщения и сообщения об использовании и выдает ошибки, когда пользователь передает программе неверные аргументы.

getopt.getopt метод

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

getopt.getopt(args, options, [long_options])

args – это список аргументов, который необходимо проанализировать.

options – строка букв опций, которую сценарий хочет распознать, с опциями, требующими аргумента, за которым следует двоеточие (:).

long_options (по желанию) – это должна быть строка с именами длинных параметров, которые должны поддерживаться.

  • Этот метод возвращает значение, состоящее из двух элементов, т.е. список пар (параметр, значение), список аргументов программы, оставшихся после удаления списка параметров.
  • Каждая пара опция-значение возвращается как опция в качестве ее первого элемента с префиксом дефиса для коротких опций (например, ‘- x’) или двумя дефисами для длинных опций (например, ‘–long-option’).

Исключение getopt.GetoptError

Это исключение возникает, когда в списке аргументов обнаруживается нераспознанный параметр или когда какой-либо опции, требующей аргумента, не дается ничего.

Аргументом исключения является строка, указывающая причину ошибки. Атрибуты msg и opt дают сообщение об ошибке и соответствующий параметр.

#!/usr/bin/python import sys, getopt def main(argv): inputfile = » outputfile = » try: opts, args = getopt.getopt(argv,»hi:o:»,[«ifile=»,»ofile=»]) except getopt.GetoptError: print ‘test.py -i -o ‘ sys.exit(2) for opt, arg in opts: if opt == ‘-h’: print ‘test.py -i -o ‘ sys.exit() elif opt in («-i», «—ifile»): inputfile = arg elif opt in («-o», «—ofile»): outputfile = arg print ‘Input file is «‘, inputfile print ‘Output file is «‘, outputfile if __name__ == «__main__»: main(sys.argv[1:])
$ test.py -h $ test.py -h usage: test.py -i -o $ test.py -i BMP -o usage: test.py -i -o $ test.py -i inputfile Input file is » inputfile Output file is »

Как использовать?

Модуль Применение Версия Python
sys Все аргументы в sys.argv (базовый) Все
argparse Создать интерфейс командной строки > = 2.3
docopt Создать интерфейсы командной строки > = 2,5
fire Автоматически создавать интерфейсы командной строки (CLI) Все
optparse Устарело

Docopt используется для создания интерфейсов командной строки.

from docopt import docopt if __name__ == ‘__main__’: arguments = docopt(__doc__, version=’Example 1′) print(arguments)

Python Fire автоматически генерирует интерфейс командной строки; вам нужна только одна строка кода. В отличие от других модулей, работает мгновенно. Не нужно определять никаких аргументов; все методы связаны по умолчанию.

Чтобы установить его, введите:

pip install fire

Определите или используйте класс:

import fire class Python(object): def hello(self): print(«Hello») def openfile(self, filename): print(«Open file ‘» + filename + «‘») if __name__ == ‘__main__’: fire.Fire(Python)

У вас есть варианты, соответствующие методам класса:

python example.py hello python example.py openfile filename.txt

Источник: pythonpip.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru