pyCharm
我已经通过运行测试了需要 root 访问权限的代码,sudo pycharm.sh
但这不是我推荐的方式。
我知道可以通过在 pyCharm 中将 python 解释器作为 sudo 运行来使用 sudo 权限进行调试,但我们该怎么做呢?
创建一个执行“sudo python”并转发参数的 shell 脚本,并将该脚本配置为 PyCharm 中的 Python 解释器。
此 shell 脚本的名称应以python
(来源:http: //forum.jetbrains.com/message/PyCharm-424-3)开头。
对于它的价值,我已经成功地运行了一个具有 sudo 特权(在 Ubuntu 16.04 上)的 python 脚本,如下所示:
在脚本的第一行,像这样定义解释器:
#!/usr/bin/sudo python
使脚本可执行:
chmod +x myscript.py
直接运行脚本,无需自己指定python
解释器:
./myscript.py
我在尝试在 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
使用您喜欢的编辑器。
现在您可以以 root 身份在 Raspberry Pi 中进行 ssh:
ssh root@raspberrypi
根据 BlueZ 的要求,使用root
instead 或pi
user,您可以使用 root 权限远程运行您的代码。
我遇到了另一种解决这个问题的方法,所以我想分享它(这个答案更像是其他答案的替代品)。
这里值得一提的是,该解决方案通过在 root 模式下仅运行某个 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
/usr/bin/python3
我通过在家中复制解决了这个问题,然后设置cap_net_bind_service
功能:
cp /usr/bin/python3 ~/python35-setcap
sudo setcap 'cap_net_bind_service=+ep' ~/python35-setcap
然后~/python35-setcap
在 pycharm 中用作 python 解释器。
这样,您可以绑定较低的端口,但不是任何 python 3 程序都可以做到,pycharm 仍然可以杀死您的脚本。如果您想要更高的安全性,您还可以限制自己的执行权限。
终端:
sudo ./Pycharm
这样你就可以以超级用户身份启动 PyCharm
我按照此处的说明操作并成功。但是有一个问题是使用 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 "$@"