Как запустить программу через пайтон?
Как через subprocess запустить программу в фоновом режиме?
Требуется запустить программу с параметрами командной строки. НО: нужно, чтобы программа.
Как выполнить cmd команду через пайтон
1. Как выполнить cmd команду в текущей папке используя пайтон? 2. Как выполнить cmd команду при.
как скачивать большие файлы через пайтон
появилась идея сделать тг бота который скачивает видео по ссылке но у меня возникли проблемы я.
Как запустить программу через Дельфи7
Как запустить программу через Дельфи7.
Как запустить программу через cmd
Как запустить эту программу через cmd? import java.util.Scanner; import mpi.MPI; import.
Не получается запустить программу через командную строку
Пытался запустить программу через командную строку. Не по необходимости, а чтобы научиться.
Посмотрел видео на ютубе. Вроде повторяю точно.
Увы, не справился…
Путь к программе такой:C:\Users\Konstantin.T430\Desktop\KP Python\IDLE примеры\Rotating circle.py
Вот что наблюдаю в консоли:
C:\Users\Konstantin.T430>python Desktop\KP Python\IDLE примеры/Rotating circle.py
python: can’t open file ‘Decktop\KP’: [Errno 2] No such file or directory
C:\Users\Konstantin.T430>
Где-то у меня ошибка. Не понимаю — что «не так»?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Не получается запустить mysqld через командную строку ( —initialize-insecure —user=root)
Пытаюсь сделать хост по гайду, чтобы избежать неточностей/несовместимостей скачал пак по ссылке.

Запустить через командную строку
Нужно запустить программу free pascal через командную строку(КС). Программа выполняет чтение из.

Запустить файл через командную строку
$ f77 sur2012.f -o sur2012.ex $ ls sur2012.ex sur2012.f $ sur2012.ex sur2012.ex: Command not.
960 / 727 / 258
Регистрация: 17.03.2022
Сообщений: 2,168
Сообщение от Simko2015 
Где-то у меня ошибка. Не понимаю — что «не так»?
Пробелы в именах файла и каталогов. Вот так попробуйте:
python «Desktop\KP Python\IDLE примеры/Rotating circle.py»
Автоматизируй это!
![]()
7054 / 4559 / 1207
Регистрация: 30.03.2015
Сообщений: 13,132
Записей в блоге: 29

Сообщение было отмечено Catstail как решение
Решение
Simko2015, как нормальные люди -создай папку на диске с, назови ее projects, пиши там свои модули и называй их латиницей, без пробелов. ТОгда и с запуском и с остальным проблем не будет.
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Сообщение от Simko2015 
Rotating circle.py
— это у тебя так программа на Питоне называется?
Регистрация: 15.05.2015
Сообщений: 40
Сообщение от Pphantom 
Пробелы в именах
Основная нелепая ошибка была- не заключал путь к файлу в кавычки
Далее получил ошибку как вы сказали — пробелы. Написал путь к другому файлу — где ни пробелов ни кириллицы — сработало. Спасибо!
Сообщение от Welemir1 
создай папку на диске с, назови ее projects
Непременно приму к действию! Спасибо!
Сообщение от Catstail 
у тебя так программа на Питоне называется?
Да. А что не так в этом имени файла? Это я с Tkinter попробовал сделать вращающийся диск Получилось
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Сообщение от Simko2015 
А что не так в этом имени файла?
— Пробел в имени файла — это очень дурной тон. О чём уже было сказано выше.
Вот эта командная строка
C:\Users\Konstantin.T430>python Desktop\KP Python\IDLE примеры/Rotating circle.py
означает запуск программы Rotating.exe c параметром circle.py. А нужно-то скорее всего вот это:
C:\Users\Konstantin.T430>python Desktop\KP Python\IDLE примеры\python "Rotating circle.py"
Регистрация: 15.05.2015
Сообщений: 40
Сообщение от Catstail 
Пробел в имени файла — это очень дурной тон
Да, спасибо! Это я понял. Буду редактировать имена файлов и папок. Наверное, и кириллицу лучше убрать?
С остальным разобрался, другой файл без пробелов и кириллицы в «пути» и в имени файла запустил.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Есть задача. Нужно запустить её через командную строку
Люди, подскажите что нужно добавить/вписать в задачке, чтобы при открытии её в командной строке она.

Запустить программу из своей программы и прочитать ее вывод в командную строку
Вопрос должен быть простым, но нигде не могу найти ответ. Функция system этого не позволяет. Есть.

Не удается передать текстовый файл в программу через командную строку
Добрый день. Есть простенькая программа, которая считает кол-во символов в файлах. #include.

Добавить возможность передачи параметров в программу через командную строку
Добавьте в код пожалуйста нужный код для того чтобы я могу введя путь открыть экзешник данной.
Как ввести через программу на си в командную строку значение переменной?
Здравствуйте, я могу открыть необходимый файл и сообщить туда заранее известные команды, но как.
Обработка аргументов командной строки. Библиотеки sys и argparse. Декораторы
Обработка аргументов командной строки. Запуск программы с аргументами
Параметры запуска, задаваемые через командную строку, чаще всего используют консольные программы, хотя программы с графическим интерфейсом тоже не брезгуют этой возможностью. Наверняка в жизни каждого программиста была ситуация, когда приходилось разбирать параметры командной строки, как правило, это не самая интересная часть программы, но без нее не обойтись. Эта статья посвящена тому, как Python облегчает жизнь программистам при решении этой задачи благодаря своей стандартной библиотеке argparse.
Примеры без использования argparse
Путь для начала у нас есть простейший скрипт на Python. Для определенности назовем скрипт coolprogram.py, это будет классический Hello World, над которым мы будем работать
if __name__ == "__main__": print ("Привет, мир!")
Мы завершили эту сложнейшую программу и отдали ее заказчику, он доволен, но просит добавить в нее возможность указывать имя того, кого приветствуем, причем этот параметр может быть не обязательным. Т.е. программа может использоваться двумя путями:
$ python coolprogram.py
$ python coolprogram.py Вася
Мы можем воспользоваться переменной argv из модуля sys. sys.argv содержит список параметров, переданных программе через командную строку, причем нулевой элемент списка — это имя нашего скрипта. Т.е. если у нас есть следующий скрипт с именем params.py:
import sys if __name__ == "__main__": for param in sys.argv: print (param)
и мы запускаем его с помощью команды
python params.py
то в консоль будет выведена единственная строка:
params.py
Если же мы добавим несколько параметров,
python params.py param1 param2 param3
то эти параметры мы увидим в списке sys.argv, начиная с первого элемента:
params.py param1 param2 param3
Здесь можно обратить внимание на то, что ссылка на интерпретатор Python в список этих параметров не входит, хотя он также присутствует в строке вызова нашего скрипта.
Вернемся к нашей задаче. Погрузившись в код на неделю, мы могли бы выдать заказчику следующий скрипт:
import sys if __name__ == "__main__": if len (sys.argv) > 1: print ("Привет, <>!".format (sys.argv[1] ) ) else: print ("Привет, мир!")
Теперь, если программа вызывается с помощью команды
python coolprogram.py
то результат будет прежний
Привет, мир!
а если мы добавим параметр:
python coolprogram.py Вася
то программа поприветствует некоего Васю:
Привет, Вася!
Пока все легко и никаких проблем не возникает. Теперь предположим, что требования заказчика вновь изменились, и на этот раз он хочет, чтобы имя приветствуемого человека передавалось после именованного параметра —name или -n, причем нужно следить, что в командной строке передано только одно имя. С этого момента у нас начнется вермишель из конструкций if.
import sys if __name__ == "__main__": if len (sys.argv) == 1: print ("Привет, мир!") else: if len (sys.argv) 3: print ("Ошибка. Слишком мало параметров.") sys.exit (1) if len (sys.argv) > 3: print ("Ошибка. Слишком много параметров.") sys.exit (1) param_name = sys.argv[1] param_value = sys.argv[2] if (param_name == "--name" or param_name == "-n"): print ("Привет, <>!".format (param_value) ) else: print ("Ошибка. Неизвестный параметр '<>'".format (param_name) ) sys.exit (1)
Здесь мы проверяем ситуацию, что мы вообще не передали ни одного параметра, потом проверяем, что дополнительных параметров у нас ровно два, что они называются именно —name или -n, и, если нас все устраивает, выводим приветствие.
Как видите, код превратился в тихий ужас. Изменить логику работы в нем в дальнейшем будет очень сложно, а при увеличении количества параметров нужно будет срочно применять объектно-ориентированные меры по отделению логики работы программы от разбора командной строки. Разбор командной строки мы могли бы выделить в отдельный класс (или классы), но мы этого здесь делать не будем, поскольку все уже сделано в стандартной библиотеке Python, которая называется argparse.
Но перед тем, как перейти к библиотеке argparse, еще немного остановимся на sys. Модуль sys обеспечивает доступ к некоторым переменным и функциям, взаимодействующим с интерпретатором python. Самыми полезными являются:
- sys.argv — список аргументов командной строки, передаваемых сценарию Python. sys.argv[0] является именем скрипта (пустой строкой в интерактивной оболочке).
- sys.exit([arg]) — выход из Python. Функция exit принимает необязательный аргумент, обычно целое число, которое дает статус выхода. Ноль считается как успешное завершение. Обязательно проверьте, имеет ли ваша операционная система какие-либо особые значения для своих статусов выхода, чтобы вы могли следить за ними в своем собственном приложении. Обратите внимание на то, что когда вы вызываете exit, это вызовет исключение SystemExit, которое позволяет функциям очистки работать в конечных пунктах блоков try / except.
- sys.stdin — стандартный поток ввода.
- sys.stdout — стандартный поток вывода.
- sys.stderr — стандартный поток ошибок. Stdin, stdout и stderr сопоставляются с файловыми объектами, которые соответствуют стандартным входам, выходам и потокам ошибок интерпретатора соответственно. Функция stdin используется для всех входов, используемых интерпретатором (за исключением скриптов), тогда как stdout используется для выходов операторов print. Эти потоки вывода можно переопределить, например для перенаправления логов вывода в графический интерфейс или в файл.
- sys.__stdin__, sys.__stdout__, sys.__stderr__ — исходные значения потоков ввода, вывода и ошибок.
Использование библиотеки argparse
Простейший случай
Как как было сказано выше, стандартная библиотека argparse предназначена для облегчения разбора командной строки. На нее можно возложить проверку переданных параметров: их количество и обозначения, а уже после того, как эта проверка будет выполнена автоматически, использовать полученные параметры в логике своей программы.
Основа работы с командной строкой в библиотеке argparse является класс ArgumentParser. У его конструктора и методов довольно много параметров, все их рассматривать не будем, поэтому в дальнейшем рассмотрим работу этого класса на примерах, попутно обсуждая различные параметры.
Простейший принцип работы с argparse следующий:
- Создаем экземпляр класса ArgumentParser.
- Добавляем в него информацию об ожидаемых параметрах с помощью метода add_argument (по одному вызову на каждый параметр).
- Разбираем командную строку помощью метода parse_args, передавая ему полученные параметры командной строки (кроме нулевого элемента списка sys.argv).
- Начинаем использовать полученные параметры.
Для начала перепишем программу coolprogram.py с единственным параметром так, чтобы она использовала библиотеку argparse. Напомню, что данном случае мы ожидаем следующий синтаксис параметров:
python coolprogram.py [Имя]
Здесь [Имя] является необязательным параметром.
Наша программа с использованием argparse может выглядеть следующим образом:
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('name', nargs='?') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args() print (namespace) if namespace.name: print ("Привет, <>!".format (namespace.name) ) else: print ("Привет, мир!")
На первый взгляд эта программа работает точно так же, как и раньше, хотя есть отличия, но мы их рассмотрим чуть позже. Пока разберемся с тем, что мы понаписали в программе.
Создание парсера вынесено в отдельную функцию, поскольку эта часть программы в будущем будет сильно изменяться и разрастаться. Сначала мы создали экземпляр класса ArgumentParser с параметрами по умолчанию. Что это за параметры, опять же, поговорим чуть позже.
Далее мы добавили ожидаемый параметр в командной строке с помощью метода add_argument. При этом такой параметр будет считаться позиционным, т.е. он должен стоять именно на этом месте и у него не будет никаких предварительных обозначений (мы их добавим позже в виде ‘-n’ или ‘—name’). Если бы мы не добавили именованный параметр nargs=’?’, то этот параметр был бы обязательным. nargs может принимать различные значения. Если бы мы ему присвоили целочисленное значение больше 0, то это бы означало, что мы ожидаем ровно такое же количество передаваемых параметров (точнее, считалось бы, что первый параметр ожидал бы список из N элементов, разделенных пробелами, этот случай мы рассмотрим позже). Также этот параметр может принимать значение ‘?’, ‘+’, ‘*’ и argparse.REMAINDER. Мы их не будем рассматривать, поскольку они важны в сочетании с необязательными именованными параметрами, которые могут располагаться как до, так и после нашего позиционного параметра. Тогда этот параметр будет показывать как интерпретировать список параметров, где будет заканчиваться один список параметров и начинаться другой.
Итак, мы создали парсер, после чего можно вызвать его метод parse_args для разбора командной строки. Если мы не укажем никакого параметра, это будет означать равносильно тому, что мы передадим в него все параметры из sys.argv кроме нулевого, который содержит имя нашей программы. т.е.
parser.parse_args (sys.argv[1:])
В качестве результата мы получим экземпляр класса Namespace, который будет содержать в качестве члена имя нашего параметра. Теперь посмотрим, чему же равны наши параметры.
Если мы это сделаем и запустим программу с переданным параметром
python coolprogram.py Вася
, то увидим его в пространстве имен.
Namespace(name='Вася')
Если же теперь мы запустим программу без дополнительных параметров, то это значение будет равно None:
Namespace(name=None)
Мы можем изменить значение по умолчанию, что позволит нам несколько сократить программу. Пусть по умолчанию используется слово ‘мир’, ведь мы его приветствуем, если параметры не переданы. Для этого воспользуемся дополнительным именованным параметром default в методе add_argument.
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('name', nargs='?', default='мир') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args (sys.argv[1:]) # print (namespace) print ("Привет, <>!".format (namespace.name) )
Программа продолжает работать точно также, как и раньше. Вы, наверное, заметили, что в предыдущем примере в метод parse_args ередаются параметры командной строки из sys.argv. Это сделано для того, чтобы показать, что список параметров мы можем передавать явно, при необходимости мы его можем предварительно обработать, хотя это вряд ли понадобится, ведь почти всю обработку можно возложить на плечи библиотеки argparse.
Добавляем именованные параметры
Теперь снова переделаем нашу программу таким образом, чтобы использовать именованные параметры. Напомню, что согласно последнему желанию (в смысле, для данной программы) заказчика имя приветствуемого человека должно передаваться после параметра —name или -n. С помощью pyparse сделать это проще простого — достаточно в качестве первых двух параметров метода add_argument передать эти имена параметров.
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('-n', '--name', default='мир') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args(sys.argv[1:]) # print (namespace) print ("Привет, <>!".format (namespace.name) )
Теперь, если мы запустим программу без параметров, то увидим знакомое «Привет, мир!», а если мы запустим программу с помощью команды
python coolprogram.py -n Вася
python coolprogram.py --name Вася
То приветствовать программа будет Васю. Обратите внимание, что теперь в методе add_argument мы убрали параметр nargs=’?’ , поскольку все именованные параметры считаются необязательными. А если они не обязательные, то возникает вопрос, как поведет себя argparse, если этот параметр не передан? Для этого уберем параметр default в add_argument.
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('-n', '--name') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args(sys.argv[1:]) print ("Привет, <>!".format (namespace.name) )
Если теперь запустить программу без параметров, то увидим приветствие великого None:
Привет, None!
Таким образом, если значение по умолчанию не указано, то оно считается равным None.
До этого мы задавали два имени для одного и того же параметра: длинное имя, начинающееся с «—» (—name) и короткое сокращение, начинающее ся с «-» (-n). При этом получение значение параметра из пространства имен осуществляется по длинному имени:
print ("Привет, <>!".format (namespace.name) )
Если мы не зададим длинное имя, то придется обращаться к параметру через его короткое имя (n):
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('-n') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args(sys.argv[1:]) print (namespace) print ("Привет, <>!".format (namespace.n) )
При этом пространство имен будет выглядеть как:
Namespace(n='Вася')
Хорошо, с уменьшением количества имен параметров разобрались, но мы можем еще и увеличить количество имен, например, мы можем добавить для того же параметра еще новое имя —username, для этого достаточно его добавить следующим параметром метода add_argument:
import sys import argparse def createParser (): parser = argparse.ArgumentParser() parser.add_argument ('-n', '--name', '--username') return parser if __name__ == '__main__': parser = createParser() namespace = parser.parse_args(sys.argv[1:]) print (namespace) print ("Привет, <>!".format (namespace.name) )
Теперь мы можем использовать три варианта передачи параметров:
python coolprogram.py -n Вася python coolprogram.py —name Вася python coolprogram.py —username Вася
Все три варианта равнозначны, при этом надо обратить внимание, что при получении значения этого параметра используется первое длинное имя, т.е. name. Пространство имен при использовании всех трех вариантов вызова программы будет выглядеть одинаково:
Namespace(name='Вася')
Для полного погружения во все сложные случаи разбора параметров, можете ознакомиться со статьей https://jenyay.net/Programming/Argparse
Упражнение 1
Напишите консольную программу, которой на вход подается единственное число N (без имени или с именем -n), а программа печатает значение Nго числа Фибоначчи
Декораторы
Декораторы в Python и примеры их практического использования.
Итак, что же это такое? Для того, чтобы понять, как работают декораторы, в первую очередь следует вспомнить, что функции в python являются объектами, соответственно, их можно возвращать из другой функции или передавать в качестве аргумента. Также следует помнить, что функция в python может быть определена и внутри другой функции.
Вспомнив это, можно смело переходить к декораторам. Декораторы — это, по сути, «обёртки», которые дают нам возможность изменить поведение функции, не изменяя её код.
Создадим свой декоратор «вручную»:
def my_shiny_new_decorator(function_to_decorate): # Внутри себя декоратор определяет функцию-"обёртку". Она будет обёрнута вокруг декорируемой, # получая возможность исполнять произвольный код до и после неё. def the_wrapper_around_the_original_function(): print("Я - код, который отработает до вызова функции") function_to_decorate() # Сама функция print("А я - код, срабатывающий после") # Вернём эту функцию return the_wrapper_around_the_original_function # Представим теперь, что у нас есть функция, которую мы не планируем больше трогать. def stand_alone_function(): print("Я простая одинокая функция, ты ведь не посмеешь меня изменять?") stand_alone_function() # Однако, чтобы изменить её поведение, мы можем декорировать её, то есть просто передать декоратору, # который обернет исходную функцию в любой код, который нам потребуется, и вернёт новую, # готовую к использованию функцию: stand_alone_function_decorated = my_shiny_new_decorator(stand_alone_function) stand_alone_function_decorated()
Возможно мы бы хотели, чтобы каждый раз, во время вызова stand_alone_function, вместо неё вызывалась stand_alone_function_decorated. Для этого просто перезапишем stand_alone_function:
stand_alone_function = my_shiny_new_decorator(stand_alone_function) stand_alone_function()
Собственно, это и есть декораторы. Вот так можно было записать предыдущий пример, используя синтаксис декораторов:
@my_shiny_new_decorator def another_stand_alone_function(): print("Оставь меня в покое") another_stand_alone_function()
То есть, декораторы в python — это просто синтаксическая обертка для конструкций вида:
another_stand_alone_function = my_shiny_new_decorator(another_stand_alone_function)
Можно использовать несколько декораций для функций:
def bread(func): def wrapper(): print() func() print("<\______/>") return wrapper def ingredients(func): def wrapper(): print("#помидоры#") func() print("~салат~") return wrapper def sandwich(food="--ветчина--"): print(food) sandwich() sandwich = bread(ingredients(sandwich)) sandwich()
И аналогично через декораторы:
@bread @ingredients def sandwich(food="--ветчина--"): print(food) sandwich()
Не забываем, что так как порядок вызова функций имеет значение, то и порядок проставление декораторов так же имеет значение.
Упражнение 2
Напишите функцию, которая получает на вход список чисел и выдает ответ сколько в данном списке четных чисел. Напишите декоратор, который меняет поведение функции следующим образом: если четных чисел нет, то пишет «Нет(» а если их больше 10, то пишет «Очень много»
Передача декоратором аргументов в функцию
Однако, все декораторы, которые мы рассматривали, не имели одного очень важного функционала — передачи аргументов декорируемой функции. Собственно, это тоже несложно сделать.
Текстовый данные в языке пайтон описываются классом str:
def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("Смотри, что я получил:", arg1, arg2) function_to_decorate(arg1, arg2) return a_wrapper_accepting_arguments # Теперь, когда мы вызываем функцию, которую возвращает декоратор, мы вызываем её "обёртку", # передаём ей аргументы и уже в свою очередь она передаёт их декорируемой функции @a_decorator_passing_arguments def print_full_name(first_name, last_name): print("Меня зовут", first_name, last_name) print_full_name("Vasya", "Pupkin")
А теперь попробуем написать декоратор, принимающий аргументы:
def decorator_maker(): print("Я создаю декораторы! Я буду вызван только раз: когда ты попросишь меня создать декоратор.") def my_decorator(func): print("Я - декоратор! Я буду вызван только раз: в момент декорирования функции.") def wrapped(): print ("Я - обёртка вокруг декорируемой функции.\n" "Я буду вызвана каждый раз, когда ты вызываешь декорируемую функцию.\n" "Я возвращаю результат работы декорируемой функции.") return func() print("Я возвращаю обёрнутую функцию.") return wrapped print("Я возвращаю декоратор.") return my_decorator # Давайте теперь создадим декоратор. Это всего лишь ещё один вызов функции new_decorator = decorator_maker() # Теперь декорируем функцию def decorated_function(): print("Я - декорируемая функция.") decorated_function = new_decorator(decorated_function) # Теперь наконец вызовем функцию: decorated_function()
Теперь перепишем данный код с помощью декораторов:
@decorator_maker() def decorated_function(): print("Я - декорируемая функция.") decorated_function()
Вернёмся к аргументам декораторов, ведь, если мы используем функцию, чтобы создавать декораторы «на лету», мы можем передавать ей любые аргументы, верно?
def decorator_maker_with_arguments(decorator_arg1, decorator_arg2): print("Я создаю декораторы! И я получил следующие аргументы:", decorator_arg1, decorator_arg2) def my_decorator(func): print("Я - декоратор. И ты всё же смог передать мне эти аргументы:", decorator_arg1, decorator_arg2) # Не перепутайте аргументы декораторов с аргументами функций! def wrapped(function_arg1, function_arg2): print ("Я - обёртка вокруг декорируемой функции.\n" "И я имею доступ ко всем аргументам\n" "\t- и декоратора: \n" "\t- и функции: \n" "Теперь я могу передать нужные аргументы дальше" .format(decorator_arg1, decorator_arg2, function_arg1, function_arg2)) return func(function_arg1, function_arg2) return wrapped return my_decorator @decorator_maker_with_arguments("Леонард", "Шелдон") def decorated_function_with_arguments(function_arg1, function_arg2): print ("Я - декорируемая функция и я знаю только о своих аргументах: " " ".format(function_arg1, function_arg2)) decorated_function_with_arguments("Раджеш", "Говард")
Таким образом, мы можем передавать декоратору любые аргументы, как обычной функции.
- Декораторы несколько замедляют вызов функции, не забывайте об этом.
- Вы не можете «раздекорировать» функцию. Безусловно, существуют трюки, позволяющие создать декоратор, который можно отсоединить от функции, но это плохая практика. Правильнее будет запомнить, что если функция декорирована — это не отменить.
- Декораторы оборачивают функции, что может затруднить отладку.
Упражнение 3
Напишите декоратор swap, который делает так, что задекорированная функция принимает все свои неименованные аргументы в порядке, обратном тому, в котором их передали (для аргументов с именем не вполне правильно учитывать порядок, в котором они были переданы).
Пример ожидаемого поведения:
@swap def div(x, y, show=False): res = x / y if show: print(res) return res div(2, 4, show=True)
Упражнение 4
- Время вызова функции
- Входящие аргументы
- Ответ return (если есть, если нет то логгировать ‘-‘)
- Время завершения работы функции
- Время работы функции
Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.
Python-сообщество
![]()
- Начало
- » Python для новичков
- » питон + cmd с аргументами
#1 Окт. 17, 2021 23:04:05
Pacifist Зарегистрирован: 2020-01-10 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
питон + cmd с аргументами
Есть программа, которая работает через командную строку.
Запуск программы –> C:\Windows\System32\cmd.exe /k fdsinit
После этого появляется какое-то “специальное” окно командной строки
Цель: из питона запустить программу, перейти в нужную директорию (или сразу открыть в нужной директории), ввести команду на обработку файла.
я могу открыть прогу через такой код
import subprocess subprocess.run('C:\Windows\System32\cmd.exe /k fdsinit', shell=True)
через какие аргументы можно выполнить сразу три действия (открыть прогу, перейти в нужную директорию, запустить команду)?
#2 Окт. 17, 2021 23:23:18
xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1260 Репутация: 108 Профиль Отправить e-mail
питон + cmd с аргументами
Получится ли как к примеру я блокноту скармливаю файл с помощью os
import os os.system('notepad.exe D:\my_doc.txt')
#3 Окт. 18, 2021 10:31:51
Pacifist Зарегистрирован: 2020-01-10 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
питон + cmd с аргументами
xam1816
import os
os.system(‘notepad.exe D:\my_doc.txt’)
Делаю аналогичный пример — не работает
import os os.system('C:\Windows\System32\cmd.exe /k fdsinit cd..')
работает такой пример, с аргументом /k, но с двумя /k уже не работает:
import os os.system('cmd.exe /k cd..')
Отредактировано Pacifist (Окт. 18, 2021 10:34:41)
#4 Окт. 18, 2021 11:07:26
PEHDOM Зарегистрирован: 2016-11-28 Сообщения: 2196 Репутация: 294 Профиль Отправить e-mail
питон + cmd с аргументами
d:\temp>test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: 123
"пароль: 123"
d:\temp>echo qwerty | test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: "пароль: qwerty "
d:\temp>
@echo off
echo "программа запущена с аргументом: %1"
set /P var="Введите пароль: "
echo "пароль: %var%"
Pacifist
через какие аргументы можно выполнить сразу три действия (открыть прогу, перейти в нужную директорию, запустить команду)?
что мешает сразу перейти в нужную директорию перед вызовом программы?
d:\temp>test2.cmd
current dir: d:\temp
d:\temp>cd ..
d:\>temp\test2.cmd
current dir: d:\
d:\>cd test
d:\test>d:\temp\test2.cmd
current dir: d:\test
d:\test>
@echo off
echo current dir: %cd%
[code python][/code]
Бериегите свое и чужое время.
Отредактировано PEHDOM (Окт. 18, 2021 11:17:15)
#5 Окт. 18, 2021 12:12:25
xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1260 Репутация: 108 Профиль Отправить e-mail
питон + cmd с аргументами
Pacifist
Делаю аналогичный пример — не работает
Я предполагал не открывать cmd.exe, а сразу типа
os.system('D:\fds.exe D:\файл.fds')
Отредактировано xam1816 (Окт. 18, 2021 12:12:44)
#6 Окт. 18, 2021 15:47:50
Pacifist Зарегистрирован: 2020-01-10 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
питон + cmd с аргументами
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать
xam1816
Я предполагал не открывать cmd.exe, а сразу типа
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
Потом перейти в нужную директорию (или сразу в ней запустить)
Потом команда с именем фала
#7 Окт. 18, 2021 16:25:02
PEHDOM Зарегистрирован: 2016-11-28 Сообщения: 2196 Репутация: 294 Профиль Отправить e-mail
питон + cmd с аргументами
Pacifist
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat

так fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
Pacifist
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать
в первом случае батник спрашивает ввод с клавиатуры, первый пример мы вводим, второй — через перенаправление echo qwerty | test2.cmd www просто подставляем из командной строки пароль qwerty, ничего не вводя с клавы.
Во втором случае сначала меняем текущую директорию, потом вызываем батник, батник считает текущей не ту директорию в которой находиться, а ту из которой запущен.
нафига вы вообще дергаете C:\Windows\System32\cmd.exe? почему не вызвать сразу батник?
[code python][/code]
Бериегите свое и чужое время.
Отредактировано PEHDOM (Окт. 18, 2021 16:35:34)
#8 Окт. 18, 2021 16:34:47
xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1260 Репутация: 108 Профиль Отправить e-mail
питон + cmd с аргументами
import os from subprocess import Popen, PIPE # changes directory to directory where input file is saved. base = (os.getcwd()) string = f"/4" os.chdir(string) cmd = 'cmd.exe' p = Popen(cmd, stdin=PIPE , stdout=PIPE, bufsize=0, shell=True) p.stdin.write(b"fdsinit*desired folder name*") p.stdin.write(b"fds_local -p 2 -o 2 *filename*.fds ") p.stdin.close() p.wait();
в интернете нашел
#9 Окт. 18, 2021 16:55:43
Pacifist Зарегистрирован: 2020-01-10 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
питон + cmd с аргументами
PEHDOM
так fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
fdsinit.bat:
@echo off set I_MPI_ROOT=%~dp0\mpi set PATH=%I_MPI_ROOT%;%PATH% set IN_CMDFDS=1 set MPIEXEC_PORT_RANGE= set MPICH_PORT_RANGE= title FDS echo. echo type helpfds for help on running fds
чего-то не хочется в него лезть
потом придется постоянно динамически менять?
xam1816
fds_local -p 2 -o 2 *filename*.fds
пример как раз для меня) спасибо! Именно эту команду мне нужно запустить, отредактировав индексы и имя файла в питоне.
Буду пробовать
#10 Окт. 18, 2021 17:15:35
PEHDOM Зарегистрирован: 2016-11-28 Сообщения: 2196 Репутация: 294 Профиль Отправить e-mail
питон + cmd с аргументами
Pacifist
чего-то не хочется в него лезть
потом придется постоянно динамически менять?
зачем? ставите условие если нет аргументов то просто батник работает как есть, если есть аргумент парсите его
типа
if "%1"=="" (
echo нормальная работа, запрашиваем команды и т.д.
) else (
echo автоматическая работа, вызываем fds.exe c параметрами передаными в команной строке
)
[code python][/code]
Бериегите свое и чужое время.
Отредактировано PEHDOM (Окт. 18, 2021 17:16:28)
