2016-08-17 3 views
-2

Новое для Python, используемое для использования MATLAB.Запустите функцию Python с входными аргументами из командной строки

Моя функция convert.py является:

def convert(a,b) 
    factor = 2194.2 
    return (a-b)*factor 

Как запустить его из командной строки с входными аргументами «а» и «B»? Я пробовал:

python convert.py 32 46 

Но есть ошибка.

Я попытался найти ответ в Интернете, нашел связанные вещи, но не ответ:

  1. Python: Run function from the command line (Stack Overflow)
  2. Command Line Arguments In Python (Stack Overflow)
  3. http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/
  4. http://www.saltycrane.com/blog/2007/12/how-to-pass-command-line-arguments-to/

Кроме того, где я могу найти ответ mysel f, чтобы я мог сохранить этот форум для более нетривиальных вопросов?

+0

Какую ошибку вы получили? – kennytm

+1

замените 'a' и' b' '' sys.argv [1] 'и' sys.argv [2] ', также checkout' argparse' –

+0

Проверить [этот документ] (http://stackoverflow.com/documentation/ python/1382/parsing-command-line-arguments # t = 201608171014404401577). – Selcuk

ответ

-1

Существует модуль Python для такого рода вещей, который называется argparse, что позволяет делать действительно интересные вещи вокруг флагов командной строки. Вам это действительно не нужно - у вас только два номера в командной строке. Это можно поистине наивно.

Python позволяет вам напрямую обращаться к аргументам командной строки через массив с именем sys.argv - сначала вам нужно будет import sys. Первый элемент в этом массиве - это всегда имя программы, но второе и третье будут номерами, которые вы передаете в i.e. sys.argv[1] и sys.argv[2]. Для более полного примера:

if len(sys.argv) < 3: 
    print 'Didnt supply to numbers' 
a = int(sys.argv[1]) 
b = int(sys.argv[2]) 

Конечно, вы будете нуждаться в некоторых проверках ошибках вокруг убедившись, что они actuall целых/поплавки.

Немного дополнительного чтения вокруг sys.argv, если вы заинтересованы here

Чтобы быть полным, мы можем дать argparse пример, а:

import argparse 

parser = argparse.ArgumentParser(description='') 
parser.add_argument('numbers', type=float, nargs=2, 
          help='Things to perform actions on') 
args = parser.parse_args() 

a = args.numbers[0] 
b = args.numbers[1] 

print a, b 
0

Вы можете сделать:

import sys 
def convert(a,b): 
    factor = 2194.2 
    return (a-b)*factor 
print(convert(int(sys.argv[1]), int(sys.argv[2]))) 

Если это все, что должно делать сценарий, вам не нужно определять функцию:

import sys 
factor = 2194.2 
print((int(sys.argv[1]), int(sys.argv[2])*factor) 

Если вы хотите изменить свой файл (тем не менее, вы должны добавить двоеточие после функции Definiton), вы могли бы следовать первый связанный подход:

python -c 'import convert, sys; print convert.convert(int(sys.argv[1]), int(sys.argv[2])' 
Смежные вопросы