2016-08-17 3 views
-2

Neu in Python, verwendet, um MATLAB zu verwenden.Führen Sie Python-Funktion mit Eingabeargumenten von der Befehlszeile aus

Meine Funktion convert.py ist:

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

Wie kann ich es von der Kommandozeile mit Eingabeargumenten ‚a‘ und ‚b‘ laufen? Ich habe versucht:

python convert.py 32 46 

Aber habe einen Fehler.

Ich habe versuchen, die Antwort zu finden online, fanden ähnliche Dinge, aber nicht die Antwort:

  1. Python: Run function from the command line (Stack-Überlauf)
  2. Command Line Arguments In Python (Stack-Überlauf)
  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/

Auch wo finde ich die Antwort mysel f, damit ich dieses Forum für mehr nicht-triviale Fragen speichern kann?

+0

Welche Fehler haben Sie? – kennytm

+1

Ersetzen Sie 'a' und' b' durch 'sys.argv [1]' und 'sys.argv [2]', überprüfen Sie auch 'argparse' –

+0

Überprüfen Sie [dieses Dokument] (http://stackoverflow.com/documentation/ python/1382/parsing-Kommandozeilenargumente # t = 201608171014404401577) out. – Selcuk

Antwort

-1

Es gibt ein Python-Modul für diese Art von Ding namens argparse, mit dem Sie wirklich tolle Dinge rund um Kommandozeilen-Flags machen können. Das brauchst du nicht wirklich - du hast gerade zwei Zahlen in der Kommandozeile. Dies kann wirklich naiv gehandhabt werden.

Python ermöglicht Ihnen den direkten Zugriff auf die Befehlszeilenargumente über ein Array namens sys.argv - Sie müssen zuerst import sys. Das erste Element in diesem Array ist immer der Programmname, aber das zweite und dritte sind die Zahlen, die Sie in i.e. sys.argv[1] und sys.argv[2] übergeben. Für ein vollständigeres Beispiel:

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

Natürlich werden Sie einige Fehler müssen um Überprüfung sicherstellen, dass sie actuall ganzen Zahlen/Schwimmer sind.

Ein bisschen extra Lesen um sys.argv wenn Sie interessiert sind here

abgeschlossen sein, wir auch ein argparse Beispiel geben kann:

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

Sie tun können:

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

Wenn das alles ist, was das Skript tun soll, müssen Sie keine Funktion definieren:

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

Wenn Sie Ihre Datei ändern mögen (trotzdem haben Sie den Doppelpunkt nach der Funktion definiton hinzufügen), könnten Sie Ihren ersten verknüpfte Ansatz folgen:

python -c 'import convert, sys; print convert.convert(int(sys.argv[1]), int(sys.argv[2])' 
Verwandte Themen