How do I run Python script using arguments in windows command line
If «hello.py» is in a PATH directory, and running hello 1 1 doesn’t pass the command-line arguments, then the .py file association is broken. If CMD or PowerShell doesn’t find «hello.py», then .PY isn’t in PATHEXT . You should not need to run python hello.py 1 1 . That’s annoying since it requires using a qualified path for hello.py or changing to its directory first.
7 Answers 7
- import sys out of hello function.
- arguments should be converted to int.
- String literal that contain ‘ should be escaped or should be surrouned by » .
- Did you invoke the program with python hello.py in command line?
import sys def hello(a,b): print "hello and that's your sum:", a + b if __name__ == "__main__": a = int(sys.argv[1]) b = int(sys.argv[2]) hello(a, b)
Using print without parentheses is not advisable in Python 2.7. You should aim for compatibility with Python 3 😉
@Agostino, print(‘a’, ‘b’) will print (‘a’, ‘b’) in Python 2.x, unlike Python 3.x which print a b . (unless you are using from __future__ import print_function in Python 2.x)
It’s not difficult to find a way to make it work for both. E.g. print(«hello and that’s your sum: » + str(a + b))
With the solution I proposed, you don’t need to import anything from __future__ . In Python 2.7 you can use parentheses with print . As long as you print a single string and use + to concatenate substrings, you get the same behavior.
I found this thread looking for information about dealing with parameters; this easy guide was so cool:
import argparse parser = argparse.ArgumentParser(description='Script so useful.') parser.add_argument("--opt1", type=int, default=1) parser.add_argument("--opt2") args = parser.parse_args() opt1_value = args.opt1 opt2_value = args.opt2
python myScript.py --opt2 = 'hi'
Thanks for sharing this with the reference where well summaries the most common usage of py arguments.
Here are all of the previous answers summarized:
- modules should be imported outside of functions.
- hello(sys.argv[2]) needs to be indented since it is inside an if statement.
- hello has 2 arguments so you need to call 2 arguments.
- as far as calling the function from terminal, you need to call python .py .
The code should look like this:
import sys def hello(a, b): print "hello and that's your sum:" sum = a+b print sum if __name__== "__main__": hello(int(sys.argv[1]), int(sys.argv[2]))
Then run the code with this command:
To execute your program from the command line, you have to call the python interpreter, like this :
C:\Python27>python hello.py 1 1
If you code resides in another directory, you will have to set the python binary path in your PATH environment variable, to be able to run it, too. You can find detailed instructions here.
thank you so much, I’ve also used it this way,I defined environment variables(PATH,path, and pathext),without success
Your indentation is broken. This should fix it:
import sys def hello(a,b): print 'hello and thats your sum:' sum=a+b print sum if __name__ == "__main__": hello(sys.argv[1], sys.argv[2])
Obviously, if you put the if __name__ statement inside the function, it will only ever be evaluated if you run that function. The problem is: the point of said statement is to run the function in the first place.
thank you so much for this code,it worked,but I’d like to know what really was wrong, and where to find more details about it please,thank you so much
import sys def hello(a, b): print 'hello and that\'s your sum: '.format(a + b) if __name__ == '__main__': hello(int(sys.argv[1]), int(sys.argv[2]))
Moreover see @thibauts answer about how to call python script.
There are more than a couple of mistakes in the code.
- ‘import sys’ line should be outside the functions as the function is itself being called using arguments fetched using sys functions.
- If you want correct sum, you should cast the arguments (strings) into floats. Change the sum line to —> sum = float(a) + float(b).
- Since you have not defined any default values for any of the function arguments, it is necessary to pass both arguments while calling the function —> hello(sys.argv[2], sys.argv[2]) import sys def hello(a,b): print («hello and that’s your sum:») sum=float(a)+float(b) print (sum) if __name__ == «__main__»: hello(sys.argv[1], sys.argv[2])
Also, using «C:\Python27>hello 1 1» to run the code looks fine but you have to make sure that the file is in one of the directories that Python knows about (PATH env variable). So, please use the full path to validate the code. Something like:
C:\Python34>python C:\Users\pranayk\Desktop\hello.py 1 1
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.24.43543
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Передача параметров в скрипт Python из командной строки.
При запуске скриптов, часто требуется указать какие-то дополнительные параметры, которые будут использованы в ходе работы программы. Конечно, можно при помощи функции input() получить данные от пользователя и сохранить их в переменных. Как говорится, дело вкуса. Но вместо множественного вызова функции input() есть намного более элегантное решение. Это передача параметров в скрипт python, непосредственно в командной строке — в момент вызова программы. Как это сделать? Давайте разберемся.
Для начала, наберите небольшую программу в своем редакторе. Сохраните её в папке C:\PyScript под именем input_var.py. Разумеется, папку и файл можете назвать как угодно, но тогда не забудьте указать свои данные при вызове скрипта в командной строке.
1. #-*- coding: UTF-8 -*- 2. from sys import argv 3. 4. script, first, second, third = argv 5. 6. print ("Этот скрипт называется: ", script) 7. print ("Значение первой переменной: ", first) 8. print ("Значение второй переменной: ", second) 9. print ("Значение третьей переменной: ", third)
Как видите, программа очень маленькая. Но её вполне хватит для демонстрации способа передачи данных в скрипт. После того, как следуя приведенным выше инструкциям, вы набрали и сохранили программу, вызовите командную строку Windows. После этого укажите имя интерпретатора python, путь к вызываемому файлу и три значения, разделяя все пробелами, как на рисунке ниже:
Рис. 1 Передача данных в скрипт Python
Если у вас скрипт хранится в другой папке — укажите свой путь к нему. После этого нажмите клавишу Enter на клавиатуре. В результате вы должны увидеть следующее:
Рис. 2 Результат выполнения программы
А теперь давайте разберем, как же это все работает.
Во второй строке мы импортируем argv из модуля sys. Во многих языках переменных argv — стандартное имя. В этой переменной хранятся данных, которые вы передаете сценарию. Пока нам достаточно знать, что эта переменная работает как «контейнер», в котором мы можем передать данные скрипту.
В четвертой строке мы производим «распаковку» содержимого argv в переменные. Слово «распаковка» может показаться странным, но в данном случае оно наиболее подходит. Фактически, мы сообщаем интерпретатору Python, что он должен взять данные из argv и последовательно поместить их в переменные, которые мы указали с левой стороны. После этого мы можем работать с ними как с обычными переменными, которым присвоили значения.
Вы можете указать свои значения вместо «15 два 105», но число значений, которые вы передаете скрипту, должно строго соответствовать количеству переменных, в которые «распаковывается» содержимое argv. Иначе вы увидите сообщение об ошибке:
Рис. 3 Ошибка распаковки данных.
Это сообщение возникло потому что мы передали в скрипт Python недостаточно данных. Если конкретнее, то строка ValueError прямо сообщает, что необходимо 4 значения, но указано 3 (имя скрипта передается автоматически).
Не забывайте, что все данные, которые мы передаем в программу python являются строковыми значениями. Поэтому параметры «10» и «105» сначала необходимо преобразовать в числовой тип при помощи функции int(), а только потом использовать в математических операциях. Будьте внимательны!
Передача аргументов скрипту (argv)#
Очень часто скрипт решает какую-то общую задачу. Например, скрипт обрабатывает как-то файл конфигурации. Конечно, в таком случае не хочется каждый раз руками в скрипте править название файла.
Гораздо лучше будет передавать имя файла как аргумент скрипта и затем использовать уже указанный файл.
Модуль sys позволяет работать с аргументами скрипта с помощью argv.
from sys import argv interface = argv[1] vlan = argv[2] access_template = ['switchport mode access', 'switchport access vlan <>', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'] print('interface <>'.format(interface)) print('\n'.join(access_template).format(vlan))
$ python access_template_argv.py Gi0/7 4 interface Gi0/7 switchport mode access switchport access vlan 4 switchport nonegotiate spanning-tree portfast spanning-tree bpduguard enable
Аргументы, которые были переданы скрипту, подставляются как значения в шаблон.
Тут надо пояснить несколько моментов:
- argv — это список
- все аргументы находятся в списке в виде строк
- argv содержит не только аргументы, которые передали скрипту, но и название самого скрипта
В данном случае в списке argv находятся такие элементы:
['access_template_argv.py', 'Gi0/7', '4']
Сначала идет имя самого скрипта, затем аргументы, в том же порядке.