【发布时间】:2016-11-16 06:49:02
【问题描述】:
假设我有一个名为 a.py 的 Python 脚本,如下所示:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author : Bhishan Poudel
# Date : Jul 13, 2016
# Imports
# Script
print("hello")
我可以通过两种方式运行此脚本:
使用 python 解释器:
python3 a.py
更改权限
chmod a+x a.py; ./a.py
问题
如何在不一直使用chmod a+x script_name 的情况下运行任何新的或旧的python 脚本。
我对我的计算机具有 root 访问权限和用户访问权限。
基本上我想要所有 .py 文件的可执行权限,我们该怎么做?
我尝试了不同的 shebangs,例如:
#!/usr/bin/python3
#!/usr/bin/env python3
#!/usr/local/bin/python3
#!/usr/local/bin/env python3
python 解释器也在 $PATH 中。 echo $PATH 的输出如下:
/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/
另外,ls /usr/bin/py* 有:
/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@
相关链接:
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
【问题讨论】:
-
你可能不希望所有
.py文件都是可执行的;不打算作为脚本运行的模块不应设置其可执行位(或者至少,没有理由设置它)。 -
@chepner,我很欣赏你的想法,但我想在不使用 chmod a+x script_name.py 的情况下运行所有文件。为了将来参考,我也会考虑你的想法。谢谢。
标签: python bash path executable chmod