Wie führe ich ein Python-Skript aus einer C-Shell aus, ohne den gesamten Pfad anzugeben?

3378
Djeezus

Ich möchte ein Python-Skript von einer Hamilton C-Shell aus ausführen, ohne den gesamten Pfad des Skripts angeben zu müssen.

Das erste, was ich versuchte, war, meinen Scripts-Ordner zur PATH-Umgebungsvariablen in Windows hinzuzufügen. Das hat funktioniert, aber die C-Shell kann die .py-Dateien nicht einfach automatisch ausführen, daher muss ich "python" vor dem Namen des Skripts verwenden.

Das Problem ist nun, dass mein Skriptsordner kein Python-Pfad ist und daher von der ausführbaren Python-Datei nicht erkannt wird. Das funktioniert also auch nicht.

Ich habe auch versucht, meinen Ordner zur Umgebungsvariablen "PYTHONPATH" hinzuzufügen (die ich erstellen musste), aber das funktioniert auch nicht.

Gibt es eine Möglichkeit, mein Skript auszuführen, indem ich einfach seinen Namen (myscript.py) oder "python myscript.py" aufrufe?

2
Jedes Update zu den untenstehenden Antworten oder finden Sie akzeptabel oder haben Sie immer noch Probleme, die Sie je nach Ihrer Frage lösen müssen? Pimp Juice IT vor 6 Jahren 0

3 Antworten auf die Frage

1
Nicole Hamilton

Ich bin der Autor von Hamilton C Shell . Es klingt, als würden Sie Cygwin mit meiner C-Shell verwenden und beim Versuch, Python zu verwenden, die folgende Fehlermeldung angezeigt:

1 C% python csh(C:\cygwin64\bin\python line 1): Couldn't open 'symlink' as a redirected standard input. > in C:\cygwin64\bin\python < called from line 1 

Das Problem ist, dass der Cygwin-Python-Befehl eine symbolische Link-Datei ist, die nur aus Cygwin besteht, und nicht eine tatsächlich ausführbare Datei. Sie werden nur von Cygwin unterstützt . (Möglicherweise haben Sie bemerkt, dass cmd.exe es auch nicht ausführt.) Folgendes ist enthalten:

2 C% whereis python C:\cygwin64\bin\python 3 C% cat `!!` cat `whereis python` !<symlink>python2.7.exe 

Da die C-Shell sie nicht als etwas anderes erkennen konnte, versuchte sie, sie als Skript zu interpretieren. Sie glaubte, dass sie einen I / O-Umleitungsoperator für die !<C-Shell erkannte, jedoch keine Datei mit dem Namen finden konnte, daher die Fehlernachricht.symlink

Da diese Datei jedoch lediglich zur eigentlichen ausführbaren Datei umgeleitet wird, können Sie dasselbe mit einem C-Shell-Alias ​​tun, den Sie in Ihrer Datei startup.csh speichern können:

4 C% alias python python2.7 5 C% python Python 2.7.10 (default, Jun 1 2015, 18:05:38) [GCC 4.9.2] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> quit() 6 C% cd desktop 7 C% cat MyScript.py print("Hello") 8 C% python MyScript.py Hello 

Wenn Sie Ihre Python-Skripts direkt von der C-Shell aus ausführen möchten, ohne den Python-Befehl eingeben zu müssen, unterstützt die C-Shell die allgemeine #!Syntax, um den Python-Interpreter zu verwenden. Beachten Sie jedoch, dass es immer noch den Namen der aktuellen ausführbaren Datei benötigt. Hier ist ein Beispiel:

9 C% cat MyScript2.py #!python2.7 print("Hello") 10 C% MyScript2.py Hello 11 C% 
1
Pimp Juice IT

Führen Sie Python-Skripts nur von der Windows-Befehlszeile aus mit dem Skriptnamen aus

Gibt es eine Möglichkeit, mein Skript auszuführen, indem ich einfach seinen Namen (myscript.py) oder "python myscript.py" aufrufe?

In Windows können Sie dies absolut problemlos tun. Ich habe dies getestet und festgestellt, dass es wie erwartet mit Windows 10 funktioniert, indem Sie die folgenden Schritte ausführen.


Konfigurieren Sie Windows-Dateizuordnungszeiger

Legen Sie den vollständigen expliziten Pfad für python.exe wie in # 3 für den korrekten Wert fest, sofern dies auf Ihrem System der Fall ist

  1. Öffnen Sie als Administrator eine Eingabeaufforderung mit erhöhten Rechten [cmd.exe]
  2. Tippen Sie ein ASSOC .py=PythonScriptund drücken SieEnter
  3. Tippen Sie ein FTYPE PythonScript="C:\Program Files\Python\python.exe" "%1" %*und drücken SieEnter
  4. Tippen Sie ein SET PATHEXT=.py;%PATHEXT%und drücken SieEnter

Bestätigen und testen Sie die Windows-Dateizuordnungszeiger

Jetzt können Sie an einer Eingabeaufforderung einfach den vollständigen Pfad zu einem Python-Skript eingeben und dann drücken Enter, und die Python-Logik sollte entsprechend ausgeführt werden.

Sie können optional einfach den vollständigen Pfad ohne die .pyDateierweiterung eingeben. Sie können auch einfach CDin das Verzeichnis wechseln, in dem sich ein Python-Skript befindet. Geben Sie dann den Skriptnamen (mit oder ohne Erweiterung) ein und drücken Sie Enter, und Python sollte die Skriptlogik entsprechend ausführen.

Beispiele aus CMD (Beitrag oben Änderungen)

  • "C:\ScriptPath\scriptname.py" und drücke Enter
  • "C:\ScriptPath\scriptname" und drücke Enter
  • CD /D "C:\ScriptPath\scriptname.py" und drücke Enter
  • CD /D "C:\ScriptPath\scriptname.py" und drücke Enter

Nur von der Shell aus mit Skriptname ausführen

Wenn Sie das Skript wirklich von der Befehlszeile aus ausführen müssen, ohne der Shell den vollständigen expliziten Pfad zur Python-Skriptdatei mitzuteilen, müssen Sie den Pfad, in dem sich dieses Skript befindet, zur %PATH%Umgebungsvariablen hinzufügen .

  1. Öffnen Sie als Administrator eine Eingabeaufforderung mit erhöhten Rechten [cmd.exe]
  2. Geben Sie ein, SET PATH=%PATH%;C:\Program Files\Pythonwo der C:\Program Files\PythonWert ist, wenn dies in Ihrem System vorhanden ist.

Jetzt können Sie den Skriptnamen einfach mit oder ohne Dateierweiterung eingeben, ohne ein CDanderes Verzeichnis zu verwenden oder den vollständigen Pfad zum Python-Skript explizit anzugeben.


Weitere Ressourcen

  • Windows-Umgebungsvariablen

  • FTYPE /?

    Displays or modifies file types used in file extension associations  FTYPE [fileType[=[openCommandString]]]  fileType Specifies the file type to examine or change openCommandString Specifies the open command to use when launching files of this type.  Type FTYPE without parameters to display the current file types that have open command strings defined. FTYPE is invoked with just a file type, it displays the current open command string for that file type. Specify nothing for the open command string and the FTYPE command will delete the open command string for the file type. Within an open command string %0 or %1 are substituted with the file name being launched through the assocation. %* gets all the parameters and %2 gets the 1st parameter, %3 the second, etc. %~n gets all the remaining parameters starting with the nth parameter, where n may be between 2 and 9, inclusive. For example:  ASSOC .pl=PerlScript FTYPE PerlScript=perl.exe %1 %*  would allow you to invoke a Perl script as follows:  script.pl 1 2 3  If you want to eliminate the need to type the extensions, then do the following:  set PATHEXT=.pl;%PATHEXT%  and the script could be invoked as follows:  script 1 2 3 
  • ASSOC /?

    Displays or modifies file extension associations  ASSOC [.ext[=[fileType]]]  .ext Specifies the file extension to associate the file type with fileType Specifies the file type to associate with the file extension  Type ASSOC without parameters to display the current file associations. If ASSOC is invoked with just a file extension, it displays the current file association for that file extension. Specify nothing for the file type and the command will delete the association for the file extension. 
0
didac

Angenommen, Sie haben ein Python-Skript MyScript.pyin einem bestimmten Verzeichnis aufgerufen :

print("Hello") 

Sie können herausfinden, wo sich Python in Ihrem System befindet:

$ which python /usr/bin/python

Durch Hinzufügen des folgenden Shebang am Anfang MyScript.pywird Ihr Skript den Python-Interpreter leicht finden und Sie können es ausführen, ohne zuerst Python aufzurufen:

#!/usr/bin/python print("Hello") 

$ ./MyScript.py Hello

(An dieser Stelle möchten Sie möglicherweise auch die .pyErweiterung löschen.)

Wenn Sie sich nicht in demselben Verzeichnis befinden MyScript.py, in dem sich das Verzeichnis befindet, müssen Sie der Shell mitteilen, wo sie sich befindet. Dazu können Sie den Pfad Ihrer PATH-Umgebungsvariablen wie folgt hinzufügen:

$ setenv PATH <path to my script>:$PATH 

oder

$ setenv PATH $PATH:<path to my script> 

Jetzt MyScript.pykann von überall ausgeführt werden.

Wenn Sie dies dauerhaft machen möchten, können Sie diese Zeile zu Ihrer .cshrc-, .login- oder ähnlichen Datei hinzufügen.

Dies scheint hauptsächlich für Linux zu gelten, aber ich bin unter Windows, daher glaube ich nicht, dass dies funktioniert. Ich habe meinen Ordner bereits zur PATH-Variablen hinzugefügt und funktioniert (dh ich kann mein Skript aus einem anderen Ordner aufrufen). Das Problem ist nun, dass der Aufruf des Skripts nicht mit dem Python-Interpreter ausgeführt wird und der Aufruf mit dem Python-Interpreter das Skript nicht finden kann. Djeezus vor 8 Jahren 0