2016-07-13 2 views
2

nehme ich ein Python-Skript a.py wie folgt aufgerufen haben:Bash: Wie ausführbare Erlaubnis für alle Python-Skripte in Unix geben?

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 
# Author : Bhishan Poudel 
# Date  : Jul 13, 2016 


# Imports 


# Script 
print("hello") 

Ich kann laufen diese Skripte auf zwei Arten:
Mit Python-Interpreter:

python3 a.py 

ändern Erlaubnis

chmod a+x a.py; ./a.py 

FRAGE
Wie kann ich alle neuen oder alten Python-Skripte ohne chmod a+x script_name alle Male ausführen.

Ich habe Root-Zugriff und Benutzerzugriff auf meinen Computer.

Grundsätzlich möchte ich ausführbare Erlaubnis für alle .py-Dateien, wie können wir das tun?

Ich habe versucht, verschiedene Bauden wie:

#!/usr/bin/python3 
#!/usr/bin/env python3 
#!/usr/local/bin/python3 
#!/usr/local/bin/env python3 

Der Python-Interpreter ist auch im $ PATH. Die Ausgabe von echo $ PATH folgt:

/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/opt/local/bin:/Users/poudel/phosim:/Users/poudel/Applications:/usr/local/octave/3.8.0/bin:/Users/poudel/Applications/Geany.app/Contents/MacOS/:/opt/local/bin:/Users/poudel/phosim:/Users/poudel/Applications:/usr/local/octave/3.8.0/bin:/Applications/Geany.app/Contents/MacOS/:/opt/local/bin:/Users/poudel/phosim:/Users/poudel/Applications:/usr/local/octave/3.8.0/bin:/Applications/Geany.app/Contents/MacOS/ 

Auch ls/usr/bin/py * hat:

/usr/bin/pydoc*   /usr/bin/[email protected]  /usr/bin/pythonw* 
/usr/bin/[email protected]   /usr/bin/[email protected] /usr/bin/[email protected] 
/usr/bin/[email protected]   /usr/bin/[email protected]  /usr/bin/[email protected] 
/usr/bin/[email protected]   /usr/bin/[email protected] /usr/bin/[email protected] 
/usr/bin/python*   /usr/bin/[email protected] 
/usr/bin/python-config* /usr/bin/[email protected] 

Weiterführende Links:
http://effbot.org/pyfaq/how-do-i-make-a-python-script-executable-on-unix.htm
Permission Denied when executing python file in linux
bash permission denied for python
Permission denied when launch python script via bash

+0

Wahrscheinlich wollen Sie * nicht * alle '.py' Dateien ausführen lassen; Bei Modulen, die nicht als Skripts ausgeführt werden sollen, sollte das ausführbare Bit nicht gesetzt sein (oder es besteht zumindest kein Grund, es zu setzen). – chepner

+0

@chepner, ich schätze deine Idee, aber ich wollte Dateien ohne chmod a + x script_name.py die ganze Zeit für alle Dateien ausführen. Für zukünftige Referenz werde ich auch Ihre Idee berücksichtigen. Vielen Dank. –

Antwort

4

Der harte Weg

Run unten mit root-Privilegien:

find /your/path/ -type f -name "*.py" -exec chmod u+x {} \; 

Hinweis:

chmod muss nicht als root ausgeführt werden, wenn Sie der Besitzer .py Datei sind.

Die intelligente Art und Weise

ein Skript schreiben Pflege dieser zu nehmen.

#!/bin/bash 
if [ -f "$1" ] 
then 
geany "$1" # You could also use xdg-open if you set geany to open .py files 
else 
cp /path/to/python/startup/template "$1" # You may omit this if you don't have a default template 
chmod u+x "$1" 
geany "$1" 
fi 

Speichern Sie das Skript als, sagen wir, pycreator in etwa /usr/bin/, dann tun

chown root:root /usr/bin/pycreator 
chmod +x-w /usr/bin/pycreator 

Um ein neues Skript zu erstellen pycreator verwenden, tun

pycreator calculator.py 

Auch [ this ] Antwort auf die durch @choroba in seinem Kommentar bietet wertvolle Einblicke in diesem Zusammenhang.

+3

Konfigurieren Sie außerdem Ihren Editor, um das Ausführungskennzeichen für zukünftige erstellte .py-Dateien hinzuzufügen. – choroba

+0

@choroba: Ich mag diese Antwort, aber ist es möglich, einen Editor zu konfigurieren sagen 'vi' automatisch' 'x' 'hinzuzufügen, während eine Datei mit einer bestimmten Erweiterung gespeichert wird, sagen' .sh'? –

+2

@mona_sax: http://unix.stackexchange.com/a/46010/13792 – choroba

2

die Idee @sjsam Verwendung, Ich habe folgende:

Angenommen, ich habe eine Datei hello.py in jedem Ort.

cd to that location 
find $PWD -type f -name "*.py" -exec chmod u+x {} \; 
./hello.py 

# Now, i can create any number of .py files in that folder and run ./filename 

# Note: if we are running as user permission, and also have sudo access, 
    we can also do: 
    sudo -H find $PWD -type f -name "*.py" -exec chmod u+x {} \; 

We should not use sudo unless absolutely necessary. 

Dank sjsam.

0

Geben Sie einfach diesen Befehl in Terminal ein.

sudo su 
Verwandte Themen