【问题标题】:How to give executable permission to all Python scripts in Linux?如何为 Linux 中的所有 Python 脚本赋予可执行权限?
【发布时间】: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


【解决方案1】:

试试这个 chmod +x *.py 它适用于我的电脑(操作系统:Ubuntu 20.4),我也在使用 #! /usr/bin/env python3 shebang

【讨论】:

    【解决方案2】:

    只需在终端中输入此命令即可。

    sudo su
    

    【讨论】:

      【解决方案3】:

      艰难的道路

      以root权限在下面运行:

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

      注意:

      如果您是.py 文件的所有者,则chmod 不需要以root 身份运行。

      聪明的方法

      编写一个脚本来处理这个问题。

      #!/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
      

      将脚本另存为 pycreator in say /usr/bin/ ,然后执行

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

      要使用pycreator 创建新脚本,请执行以下操作

      pycreator calculator.py
      

      @choroba 在他的评论中指出的[ this ] 答案也提供了这方面的宝贵见解。

      【讨论】:

      • 另外,配置你的编辑器为将来创建的 .py 文件添加执行标志。
      • @choroba :我喜欢这个答案,但是是否可以配置一个编辑器说vi 以自动添加+x,同时保存具有特定扩展名的文件说.sh
      【解决方案4】:

      使用@sjsam 的想法, 我做了以下操作:

      假设我在任何位置都有一个文件 hello.py。

      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.
      

      感谢 sjsam。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-02
        • 1970-01-01
        • 2019-09-12
        • 2018-08-18
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多