【问题标题】:Debugging in pyCharm with sudo privileges?使用 sudo 权限在 pyCharm 中调试?
【发布时间】:2013-01-13 00:41:03
【问题描述】:

我已经通过运行 sudo pycharm.sh 测试了需要在 pyCharm 中进行 root 访问的代码,但这不是我推荐的方式。

我知道可以通过在 pyCharm 中将 python 解释器作为 sudo 运行来使用 sudo 权限进行调试,但我们该怎么做呢?

【问题讨论】:

  • 你终于解决问题了吗?如果我运行 sudo pycharm.sh,pycharm 将被重新安装和重新配置...

标签: linux pycharm


【解决方案1】:

创建一个执行“sudo python”并转发参数的 shell 脚本,并将该脚本配置为 PyCharm 中的 Python 解释器。

此 shell 脚本的名称应以 python 开头(来源:http://forum.jetbrains.com/message/PyCharm-424-3)。

【讨论】:

  • 对不起,伙计们,你能告诉我更多关于这个解决方案的信息吗?我以为您的意思是 sh 脚本,但 PyCharm 无法将其用作 Python 解释器。谢谢。
  • @bellum 我已经确定了答案。
  • 来自 PyCharm 的信号丢失...停止按钮不再起作用,您会遇到僵尸
  • 你能告诉我如何创建一个shell脚本吗?我应该将其存储为 .txt 文件吗?应该将其存储在哪里?
  • Here 是一个问题的完整解决方案
【解决方案2】:

在 PyCharm 新版本中,它具有在根目录下运行 Python 解释器的配置,无需解决方法。见下图。选中复选框:使用此解释器通过 sudo 以 root 权限执行代码

【讨论】:

  • 遗憾的是,这仅适用于远程口译员,不适用于本地口译员。
【解决方案3】:

为了它的价值,我已经成功地运行了一个具有 sudo 权限的 python 脚本(在 Ubuntu 16.04 上),如下所示:

  1. 在脚本的第一行,像这样定义解释器:

    #!/usr/bin/sudo python

  2. 使脚本可执行:

    chmod +x myscript.py

  3. 直接运行脚本,无需自己指定python解释器:

    ./myscript.py

  4. 脚本将要求输入 sudo 密码并以提升的权限继续运行。

【讨论】:

    【解决方案4】:

    我通过在我家复制/usr/bin/python3,然后设置cap_net_bind_service 能力解决了这个问题:

    cp /usr/bin/python3 ~/python35-setcap
    sudo setcap 'cap_net_bind_service=+ep' ~/python35-setcap
    

    然后在pycharm中使用~/python35-setcap作为python解释器。

    这样,你可以绑定较低的端口,但不是任何python 3程序都可以做到,pycharm仍然可以杀死你的脚本。如果您想要更高的安全性,您还可以限制自己的执行权限。

    【讨论】:

    • 这确实是唯一有效的解决方案。如果您可以通过 Linux 功能克服它,人们就会忘记 shell 脚本解决方案! Linux Capabilities 是专门为解决这类问题而设计的。例如 - squidarth.com/networking/systems/rc/2018/05/28/…
    【解决方案5】:

    我在尝试在 Raspberry Pi 上调试蓝牙相关代码时遇到了同样的问题。我想,由于您正在设备上进行远程调试,因此该设备仅供开发使用。在这种情况下,在我不起眼的选择中,您应该允许 ssh root 登录,因此您可以将 PyCharm 配置为使用 root 用户,而无需 sudo。这就是我选择的解决方案。

    以下说明适用于 Raspberry Pi,但任何 Linux 发行版的过程都相同:

    首先,将您的公钥添加到authorized_keys

    cat ~/.ssh/id_rsa.pub | ssh pi@raspberrypi "mkdir -p ~/.ssh && cat >> 
    ~/.ssh/authorized_keys"
    

    然后登录树莓派:

    ssh pi@raspberrypi
    

    拥有控制台后,将密钥复制到root 目录:

    sudo mkdir /root/.ssh
    sudo cp authorized_keys /root/.ssh/
    

    最后编辑sshd_config添加PermitRootLogin without-password

    sudo vim /etc/ssh/sshd_config
    

    使用您喜欢的编辑器。

    现在您可以在 Raspberry Pi 中以 root 身份 ssh:

    ssh root@raspberrypi
    

    使用 rootpi 用户,您可以使用 root 权限运行代码,甚至远程运行,如 BlueZ 要求。

    【讨论】:

      【解决方案6】:

      对于那些寻求更简洁的解决方案并且不介意每次都输入密码的人。

      转到您的运行配置 > 编辑配置

      在“执行”下,选中在输出控制台中模拟终端选项。

      这将允许您在维护当前用户的同时调试 Python 脚本,并在需要时为脚本提供提升的 sudo 权限。如果您跨多个项目工作,它还可以更轻松地维护不同的虚拟环境。

      【讨论】:

      • 不确定这是如何解决用户提出的问题
      • @StanGeo - 这直接解决了这个问题,用户可以获得调试功能,同时还会提示输入 sudo 密码,而无需使用 sudo 运行 PyCharm 并丢失所有配置。试试看。
      【解决方案7】:

      我遇到了另一种解决这个问题的方法,所以我想分享一下(这个答案更像是其他答案的替代品)。

      这里值得一提的是,该解决方案通过在根模式下仅运行某个 Python 脚本(在 pPyCharm IDE 中)而不是整个 PyCharm 应用程序来“解决”问题。

      1) 禁用运行 Python 需要密码:

      这将通过编辑 /etc/sudoers.d/python 文件来实现。我们需要做的是在该文件中添加一个条目,如下所示:

      用户主机=(root)NOPASSWD:full_path_to_python,例如:

      guya ubuntu = (root) NOPASSWD: /usr/bin/python
      

      注意事项:

      user可以通过命令检测到:whoami

      host可以通过命令检测到:hostname

      2) 创建“sudo 脚本”:此脚本的目的是赋予 Python 以 root 用户身份运行的权限。

      创建一个名为 python-sudo.sh 的脚本,并在其中添加以下内容:

      #!/bin/bash
      sudo /usr/bin/python "$@"
      

      再次注意,路径是上一阶段的 Python 路径。 还有,这个路径就是系统上Python2的路径。

      不要忘记使用以下命令为该脚本授予执行权限:chmod

      chmod +x python-sudo.sh
      

      3) 使用 python-sudo.sh 脚本作为 PyCharm 解释器:

      在 PyCharm 中转到:File --> Settings --> Project interpreter

      点击右上角的“设置”图标,然后点击“添加本地”。

      在浏览器选项中选择我们之前创建的python-sudo.sh 脚本。这将使 PyCharm 有权以 root 身份运行 Python 脚本。

      4) 调试测试:剩下要做的就是在 PyCharm IDE 中调试特定的 Python 脚本。这可以通过右键单击要调试的脚本轻松完成 --> 点击Debug sample_script_to_debug.py

      【讨论】:

        【解决方案8】:

        终端:

        sudo ./Pycharm
        

        这样你就可以作为超级用户启动 PyCharm

        【讨论】:

        • 这是列出的唯一对我有用的方法。其他答案确实有效,但它们比仅以 root 身份运行 PyCharm 更笨重且更持久。对于调试需要超级用户权限的脚本的一次性实例,这是要走的路。
        【解决方案9】:

        我按照here 的指示操作并成功。但是有一个问题是使用 sudo 时 PYTHONPATH 无效。所以当你编辑时

        sudo visudo -f /etc/sudoers.d/python
        

        添加:

        user host = (root) NOPASSWD:SETENV: /home/yizhao/anaconda3/bin/python
        

        你的脚本也应该是:

        #! /bin/bash
        sudo PYTHONPATH=$PYTHONPATH /home/name/anaconda3/bin/python "$@"
        

        【讨论】:

          猜你喜欢
          • 2017-05-23
          • 2022-12-11
          • 1970-01-01
          • 2016-05-29
          • 1970-01-01
          • 2018-10-24
          • 2011-09-12
          • 2017-03-01
          • 1970-01-01
          相关资源
          最近更新 更多