Vi Editor oder nano - wird Skript anders behandelt?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    bin gerade am Skript anpassen und der Ersteller hat den Vi Editor zum Erstellen angegeben.

    1) Wird ein Skript anders behandelt, wenn ich es mit Nano erstelle/bearbeite und dann ausführbar mache und 755er Rechte vergebe oder ist es egal, welchen Editor ich verwende?

    2) Frage zu Skripts:
    Ändert sich das Verhalten eines Skripts, wenn man als Endung .txt statt .py hat - ähnlich wie bei DOS Batch oder EXE Dateien?

    3) Muss ein Standard Python Skript die Endung "py" haben oder wird beim Ausführen am Shebang sowieso erkannt, welcher Interpreter notwendig ist? Kann ich eine Endung auch weglassen und das Skript läuft ohne Probleme?


    4) In einem Script steht ein Befehl "cmd"

    cmd = "MAIL.py"
    #sub = subprocess.Popen(["python", "/home/pi/MAIL"],
    stdout=subprocess.PIPE) #.communicate()
    sub = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    sub
    time.sleep(1)
    sub.kill()

    Ich finde nirgends eine Erklärung, was das für ein Befehl ist. Ist das ähnlich wie bei Windows der "Cmd" Befehl oder einfach nur eine Definition?


    5) In einem Skript kam immer eine Fehlermeldung bei ' ' Apostrophen oder "leicht gewellten" Anführungszeichen . Wenn ich diese durch " " ersetzt habe, liefs problemlos. Wovon hängt es ab, welchen Zeichensatz man verwenden muss?

    Vielen Dank schon mal für die Hilfe für einen Neustarter.

  • Vi Editor oder nano - wird Skript anders behandelt?? Schau mal ob du hier fündig wirst!


  • 1) Wird ein Skript anders behandelt, wenn ich es mit Nano erstelle/bearbeite und dann ausführbar mache und 755er Rechte vergebe oder ist es egal, welchen Editor ich verwende?

    Letzteres.


    Ändert sich das Verhalten eines Skripts, wenn man als Endung .txt statt .py hat - ähnlich wie bei DOS Batch oder EXE Dateien?

    Nein.


    3) Muss ein Standard Python Skript die Endung "py" haben oder wird beim Ausführen am Shebang sowieso erkannt, welcher Interpreter notwendig ist?

    Letzteres.


    Kann ich eine Endung auch weglassen und das Skript läuft ohne Probleme?

    Ja.


    4) In einem Script steht ein Befehl "cmd"
    cmd = "MAIL.py"
    ...
    sub = subprocess.Popen(cmd, stdout=subprocess.PIPE)

    Ich finde nirgends eine Erklärung, was das für ein Befehl ist. Ist das ähnlich wie bei Windows der "Cmd" Befehl oder einfach nur eine Definition?

    Das ist eine Wertzuweisung an eine (beliebig benannte) Variable.

    Einmal editiert, zuletzt von Manul (27. Juni 2017 um 15:17)

  • Hallo,

    zu 4.: ein Python-Skript aus einem anderem Python-Skripte mit `subprocess` aufzurufen, ist in 99,99% der Fälle falsch. Wenn du Funktionen / Klassen / ... aus deren Skripten braucht, dann importiert man diese mit der `import`Anweisung.

    zu den Dateiendungen: diese haben unter Linux nicht die Bedeutung, die sie unter Windows haben. Sprich unter Linux wird nicht anhand Dateiendung der Dateityp erkannt.

    Gruß, noisefloor

  • Thx @ Manul und @ noisefloor - VIELEN DANK für die schnellen Antworten!
    Automatisch zusammengefügt:


    Hallo,

    zu 4.: ein Python-Skript aus einem anderem Python-Skripte mit `subprocess` aufzurufen, ist in 99,99% der Fälle falsch. Wenn du Funktionen / Klassen / ... aus deren Skripten braucht, dann importiert man diese mit der `import`Anweisung.

    zu den Dateiendungen: diese haben unter Linux nicht die Bedeutung, die sie unter Windows haben. Sprich unter Linux wird nicht anhand Dateiendung der Dateityp erkannt.

    Gruß, noisefloor


    Hallo noisefloor,

    es geht mir dann darum, dass ein GPIO ein Signal gibt und je nachdem verschiedene Mails verschickt werden sollen. Ich dachte wegen der Übersichtlichkeit Mail Skripte auszulagern, sonst wird das Ganze ein Roman ;)

    Kann ich ein Script auch als Modul definieren, das dann importiert werden kann - wäre natürlich praktisch.

    Einmal editiert, zuletzt von Raspiuser8716 (27. Juni 2017 um 15:42)

  • Hallo,

    Zitat

    Ich dachte wegen der Übersichtlichkeit Mail Skripte auszulagern, sonst wird das Ganze ein Roman


    Vollkommen richtig.

    Zitat

    Kann ich ein Script auch als Modul definieren, das dann importiert werden kann - wäre natürlich praktisch.


    Nicht nur praktisch, sondern der normale Weg. Im einfachsten Fall hast du in dem zu importierende Skript eine Funktion zum Mailversand, die du importierst und dann bei Bedarf aufrufst.

    Gruß, noisefloor


  • Kann ich ein Script auch als Modul definieren, das dann importiert werden kann - wäre natürlich praktisch.

    Ja. Allerdings müssen sie m.W. in diesem Fall im selben Verzeichnis wie das importierende Skript liegen und tatsächlich auf .py enden. Import erfolgt dann über

    import <name-ohne-.py>


  • 3) Muss ein Standard Python Skript die Endung "py" haben oder wird beim Ausführen am Shebang sowieso erkannt, welcher Interpreter notwendig ist? Kann ich eine Endung auch weglassen und das Skript läuft ohne Probleme?

    Wie schon gesagt, das ist egal, ein .abc kann als Shebang XYZ haben.

    Gründe für die Endung
    - ich sehe auf Anhieb welche Sprache die Datei beinhaltet
    - Texteditoren verwenden im allg. die Datei-Endung für Syntax-Highlighting

    BTW, wer wie ich noch Wordstar gelernt hat, benutzt den guten alten joe :)

    Knut

    Einmal editiert, zuletzt von KKoPi (27. Juni 2017 um 15:57)

  • @ Manul und @ noisfloor

    Und nochmal vielen Dank euch beiden für die fixen Antworten.

    Schöne Grüße

    Raspiuser8716
    Automatisch zusammengefügt:

    Wie schon gesagt, das ist egal, ein .abc kann als Shebang XYZ haben.

    Gründe für die Endung
    - ich sehe auf Anhieb welche Sprache die Datei beinhaltet
    - Texteditoren verwenden im allg. die Datei-Endung für Syntax-Highlighting

    BTW, wer wie ich noch Wordstar gelernt hat, benutzt den guten alten joe :)

    Knut

    @ Knut

    Thx für die Info!

    Einmal editiert, zuletzt von Raspiuser8716 (27. Juni 2017 um 16:01)

  • Hallo,

    Manul:

    Zitat

    Allerdings müssen sie m.W. in diesem Fall im selben Verzeichnis wie das importierende Skript liegen


    Nein, muss nicht. Python kennt relative Importe und man auch in den EnvironmentSettings von Python zu durchsuchende Pfade hinzufügen. Letzteres ist nicht so üblich, ersteres ist gerade bei größeren Projekten / Modulen sehr üblich.

    Gruß, noisefloor


  • import <name-ohne-.py>

    Manul: Nö. Was ist mit den folgenden Dateien? Treffen die auf deine "Regel" zu? So einfach ist es nicht ;)

    Code
    mein.modul.py
    mein-modul.py
    mein/modul.py
    mein?modul.py
    mein"modul".py
    etc.

    Alles POSIX konform.

    Widerspricht wohl alles PEP8 und würde man a) umbenennen oder b) symlinken oder c) __import__('mein-modul.py') etc nutzen müssen.

    LG


  • Manul: Nö. Was ist mit den folgenden Dateien? Treffen die auf deine "Regel" zu? So einfach ist es nicht ;)

    Deshalb hab ich ja auch "m.W." geschrieben. ;) Wobei auch das schon verkürzt für "So geht's. Mir ist bekannt, daß es auch andere Möglichkeiten gibt, ich hab mich aber nie damit beschäftigt, welche." war. Insofern herzlichen Dank für die Korrektur!

    Einmal editiert, zuletzt von Manul (27. Juni 2017 um 16:46)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!