Issue
Suppose I have a python script called a.py like this:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author : Bhishan Poudel
# Date : Jul 13, 2016
# Imports
# Script
print("hello")
I can run this scripts in two ways:
Using python interpreter:
python3 a.py
Changing permission
chmod a+x a.py; ./a.py
QUESTION
How can I run any new or old python scripts without using chmod a+x script_name
all the times.
I have root access and user access both to my computer.
Basically i want executable permission to all the .py files, how can we do so?
I tried different shebangs such as:
#!/usr/bin/python3
#!/usr/bin/env python3
#!/usr/local/bin/python3
#!/usr/local/bin/env python3
The python interpreter is also in the $PATH. The output of echo $PATH is following:
/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/
Also, ls /usr/bin/py* has:
/usr/bin/pydoc* /usr/bin/python2.5@ /usr/bin/pythonw*
/usr/bin/pydoc2.5@ /usr/bin/python2.5-config@ /usr/bin/pythonw2.5@
/usr/bin/pydoc2.6@ /usr/bin/python2.6@ /usr/bin/pythonw2.6@
/usr/bin/pydoc2.7@ /usr/bin/python2.6-config@ /usr/bin/pythonw2.7@
/usr/bin/python* /usr/bin/python2.7@
/usr/bin/python-config* /usr/bin/python2.7-config@
Related 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
Solution
The hard way
Run below with root privilege:
find /your/path/ -type f -name "*.py" -exec chmod u+x {} \;
Note:
chmod
need not be run as root if you're the owner of .py
file.
The smart way
Write a script to take care of this.
#!/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
Save the script as, say, pycreator
in say /usr/bin/
, then do
chown root:root /usr/bin/pycreator
chmod +x-w /usr/bin/pycreator
To create a new script using pycreator
, do
pycreator calculator.py
Also [ this ] answer pointed to by @choroba in his comment provides valuable insight in this regard.
Answered By - sjsam Answer Checked By - Katrina (WPSolving Volunteer)