2013-08-14 14 views
29

Ich schrieb ein Skript in Python, das ein paar Dateien dauert, führt ein paar Tests und zählt die Anzahl der total_bugs beim Schreiben neuer Dateien mit Informationen für jeden (Bugs + mehr).Der beste Weg, um einen Wert aus einem Python-Skript

, um ein paar Dateien aus aktuellem Arbeitsverzeichnis nehmen:

myscript.py -i input_name1 input_name2

Wenn diese Arbeit getan ist, würde ich das Drehbuch zu 'Rückkehr total_bugs' mag aber ich bin mir nicht sicher über den besten Weg, dies zu implementieren.

Derzeit ist das Skript druckt Sachen wie:

[working directory] 
[files being opened] 
[completed work for file a + num_of_bugs_for_a] 
[completed work for file b + num_of_bugs_for_b] 
... 
[work complete] 

ein wenig Hilfe (Hinweise/Tipps/Code-Beispiele) könnte hier hilfreich sein.

Btw, das muss für Windows und Unix funktionieren.

+5

Es ist im Allgemeinen eine schlechte Idee, zu versuchen, den Rückgabewert einer ausführbaren Datei zu verwenden, um alles außer einem Fehlercode oder 0 für Erfolg zurückzugeben. Was machen Sie mit diesem Wert, wenn er zurückgegeben wird? – geoffspear

+1

Weiß nichts über Windows, aber in Linux ist es üblich, dass Programme das Ergebnis auf stdout ausgeben. Es sieht so aus, als ob Ihr Skript normalerweise eine Reihe von Informationen ausgibt, aber vielleicht mit einem anderen Flag (vielleicht c für die Zählung?), Es druckt nur die Gesamtzahl der Dateien, z. myscript.py -c -i input_name1 input_name2 – arghbleargh

+0

@ Woble, es ist ein Skript zum Auffinden von Fehlern in Berichtsdateien. Der Wert ermöglicht es abzuschätzen, wie gut die Berichtsdateien geschrieben sind. –

Antwort

63

Wenn Sie Ihr Skript Rückkehr wollen Werte, tun nur return [1,2,3] aus einer Funktion Code Einwickeln aber dann würden Sie das Skript von einem anderen Skript importieren müssen auch für diese Informationen keinen Gebrauch haben:

Rückgabewerte (aus einer Verpackungs-Funktion)

(wieder, dies würde durch einen separaten Python-Skript ausgeführt werden und importiert werden, um etwas gutes zu tun, selbst):

import ... 
def main(): 
    # calculate stuff 
    return [1,2,3] 

Exit-Codes als Indikatoren

(Dies ist im Allgemeinen nur gut, wenn Sie einem Governor anzeigen möchten, was schiefgelaufen ist oder einfach die Anzahl der gezählten Bugs/Zeilen oder w/e. Normalerweise 0 ist ein guter Ausgang und> = 1 ist ein schlechter Ausgang, aber man konnte sie in irgendeiner Weise Sie Daten wollen inter schwafeln aus ihm heraus zu bekommen)

import sys 
# calculate and stuff 
sys.exit(100) 

und Ausgang mit einem bestimmten Exit-Code je nachdem, was Sie wollen das Ihrem Gouverneur erzählen. Ich verwendete Exit-Codes beim Ausführen von Skripts durch eine Planungs- und Überwachungsumgebung, um anzuzeigen, was passiert ist.

Stdout als Relais

Wenn Sie nicht stdout verwenden würde mit der Außenwelt zu kommunizieren (wie Sie beschrieben haben). Aber das ist im Allgemeinen eine schlechte Idee, es sei denn, es ist ein Parser, der Ihr Skript ausführt und alles abfangen kann, worüber Sie berichten.

Wenn Sie Ihr Skript in einer kontrollierten Zeitplanungsumgebung ausführen, sind Exit-Codes der beste Weg.

Dateien als Förderer

Es gibt auch die Möglichkeit, einfach Informationen in eine Datei zu schreiben, und speichern Sie die dort Ergebnis.

# calculate 
with open('finish.txt', 'wb') as fh: 
    fh.write(str(5)+'\n') 

und den Wert/Ergebnis von dort abholen.Sie können es sogar im CSV-Format tun, damit andere es einfacher lesen können.

+0

Für was ist die Wahl? o0 – Torxed

+1

Es ist nicht von mir, aber ich denke, es ist os._exit() anstelle von sys.exit() vorgeschlagen. Siehe http://docs.python.org/2/library/os.html#os._exit – rodion

+0

Guter Punkt, ich bin nur von Schreiben '_exit()' so oft in meinen thread-Anwendungen verwendet, dass ich dachte, es warn 't eine große Sache: S – Torxed

Verwandte Themen