Einführung in das Hauptprogramm

PythonPythonBeginner
Jetzt üben

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

Einführung

Dieser Abschnitt stellt das Konzept eines Hauptprogramms oder eines Hauptmoduls vor.

Hauptfunktionen

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 Hauptmodul

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üfung

Es 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.

Hauptprogramme vs. Bibliotheksimporte

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...

Programmschablone

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()

Befehlszeilentools

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.

Befehlszeilenargumente

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

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

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.

Programmende

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.

Die #!-Zeile

Auf 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.

Skript-Vorlage

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)

Übung 3.15: main()-Funktionen

Fü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
>>>
✨ Lösung prüfen und üben

Übung 3.16: Skripte erstellen

Ä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
✨ Lösung prüfen und üben

Zusammenfassung

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.