Einführung
Dieser Abschnitt stellt das Konzept eines Hauptprogramms oder eines Hauptmoduls vor.
This tutorial is from open-source community. Access the source code
💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken
Dieser Abschnitt stellt das Konzept eines Hauptprogramms oder eines Hauptmoduls vor.
In vielen Programmiersprachen gibt es das Konzept einer main
-Funktion oder -Methode.
// c / c++
int main(int argc, char *argv[]) {
...
}
// java
class myprog {
public static void main(String args[]) {
...
}
}
Dies ist die erste Funktion, die beim Start einer Anwendung ausgeführt wird.
Python hat keine main
-Funktion oder -Methode. Stattdessen gibt es ein main
-Modul. Das main
-Modul ist die Quelldatei, die zuerst ausgeführt wird.
$ python3 prog.py
...
Egal welche Datei Sie beim Start dem Interpreter geben, diese wird zu main
. Der Dateiname spielt keine Rolle.
__main__
-PrüfungEs ist üblich, dass Module, die als Hauptskript ausgeführt werden, diese Konvention verwenden:
## prog.py
...
if __name__ == '__main__':
## Wird als Hauptprogramm ausgeführt...
Anweisungen
...
Die Anweisungen, die innerhalb der if
-Anweisung eingeschlossen sind, werden zum main
-Programm.
Jede Python-Datei kann entweder als Hauptprogramm oder als Bibliotheksimport ausgeführt werden:
$ python3 prog.py ## Wird als Hauptprogramm ausgeführt
import prog ## Wird als Bibliotheksimport ausgeführt
In beiden Fällen ist __name__
der Name des Moduls. Es wird jedoch nur auf __main__
gesetzt, wenn es als Hauptprogramm ausgeführt wird.
Normalerweise möchten Sie nicht, dass Anweisungen, die Teil des Hauptprogramms sind, beim Bibliotheksimport ausgeführt werden. Daher ist es üblich, eine if
-Prüfung in Code zu haben, der auf beide Weise verwendet werden kann.
if __name__ == '__main__':
## Wird nicht ausgeführt, wenn mit import geladen...
Hier ist eine übliche Programmschablone zum Schreiben eines Python-Programms:
## prog.py
## Importanweisungen (Bibliotheken)
import modules
## Funktionen
def spam():
...
def blah():
...
## Hauptfunktion
def main():
...
if __name__ == '__main__':
main()
Python wird häufig für Befehlszeilentools verwendet
$ python3 report.py portfolio.csv prices.csv
Das bedeutet, dass die Skripte aus der Shell / dem Terminal ausgeführt werden. Übliche Anwendungsfälle sind Automatisierung, Hintergrundaufgaben usw.
Die Befehlszeile ist eine Liste von Textzeichenketten.
$ python3 report.py portfolio.csv prices.csv
Diese Liste von Textzeichenketten wird in sys.argv
gefunden.
## In der vorherigen bash-Anweisung
sys.argv ## ['report.py, 'portfolio.csv', 'prices.csv']
Hier ist ein einfaches Beispiel zur Verarbeitung der Argumente:
import sys
if len(sys.argv)!= 3:
raise SystemExit(f'Usage: {sys.argv[0]} ' 'portfile pricefile')
portfile = sys.argv[1]
pricefile = sys.argv[2]
...
Standard-Eingabe/Ausgabe (oder stdio) sind Dateien, die genauso wie normale Dateien funktionieren.
sys.stdout
sys.stderr
sys.stdin
Standardmäßig wird die Ausgabe von print
an sys.stdout
geleitet. Die Eingabe wird von sys.stdin
gelesen. Rückverfolgungen und Fehler werden an sys.stderr
geleitet.
Bedenken Sie, dass stdio an Terminals, Dateien, Rohre usw. angeschlossen sein kann.
$ python3 prog.py > results.txt
## oder
$ cmd1 | python3 prog.py | cmd2
Umgebungsvariablen werden in der Shell festgelegt.
$ export NAME dave
$ export RSH ssh
$ python3 prog.py
os.environ
ist ein Wörterbuch, das diese Werte enthält.
import os
name = os.environ['NAME'] ## 'dave'
Änderungen werden in allen späteren von dem Programm gestarteten Unterprozessen widergespiegelt.
Das Programmende wird durch Ausnahmen behandelt.
raise SystemExit
raise SystemExit(exitcode)
raise SystemExit('Informative message')
Eine Alternative.
import sys
sys.exit(exitcode)
Ein nicht nuller Exit-Code zeigt einen Fehler an.
#!
-ZeileAuf Unix kann die #!
-Zeile ein Skript als Python starten. Fügen Sie Folgendes zur ersten Zeile Ihrer Skriptdatei hinzu.
#!/usr/bin/env python3
#./prog.py
...
Es erfordert die Ausführbarkeitsberechtigung.
$ chmod +x prog.py
## Dann können Sie ausführen
$./prog.py
... Ausgabe...
Hinweis: Der Python-Launcher unter Windows sucht ebenfalls nach der #!
-Zeile, um die Sprachversion anzugeben.
Schließlich ist hier eine häufige Code-Vorlage für Python-Programme, die als Befehlszeilentools laufen:
#!/usr/bin/env python3
#./prog.py
## Import-Anweisungen (Bibliotheken)
import modules
## Funktionen
def spam():
...
def blah():
...
## Hauptfunktion
def main(argv):
## Analysiere die Befehlszeilenargumente, die Umgebung usw.
...
if __name__ == '__main__':
import sys
main(sys.argv)
main()
-FunktionenFügen Sie in der Datei report.py
eine main()
-Funktion hinzu, die eine Liste von Befehlszeilenoptionen akzeptiert und die gleiche Ausgabe wie zuvor erzeugt. Sie sollten es interaktiv wie folgt ausführen können:
>>> import report
>>> report.main(['/home/labex/project/report.py', '/home/labex/project/portfolio.csv', '/home/labex/project/prices.csv'])
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84
>>>
Ändern Sie die Datei pcost.py
so, dass sie eine ähnliche main()
-Funktion hat:
>>> import pcost
>>> pcost.main(['/home/labex/project/pcost.py', '/home/labex/project/portfolio.csv'])
Total cost: 44671.15
>>>
Ändern Sie die Programme report.py
und pcost.py
so, dass sie als Skript auf der Befehlszeile ausgeführt werden können:
$./report.py portfolio.csv prices.csv
Name Anteile Preis Änderung
---------- ---------- ---------- ----------
AA 100 9,22 -22,98
IBM 50 106,28 15,18
CAT 150 35,46 -47,98
MSFT 200 20,89 -30,34
GE 95 13,48 -26,89
MSFT 50 20,89 -44,21
IBM 100 106,28 35,84
$./pcost.py portfolio.csv
Gesamtkosten: 44671,15
Herzlichen Glückwunsch! Sie haben das Lab zu dem Hauptmodul abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.