我已经通过运行sudo pycharm.sh
测试了需要根访问权限的代码在pyCharm
中的表现,但这不是我建议的做法。
我知道可以在pyCharm中以sudo身份运行python解释器来进行调试,但我们该如何做呢?
/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仍然可以杀死您的脚本。如果您希望更安全,还可以限制自己的执行权限。
值得一提的是,我成功地以sudo权限运行了一个python脚本(在Ubuntu 16.04上),步骤如下:
在脚本的第一行中,像这样定义解释器:
#!/usr/bin/sudo python
将脚本设为可执行:
chmod +x myscript.py
直接运行脚本,不要自己指定python
解释器:
./myscript.py
我遇到了解决这个问题的另一种方法,所以想分享一下(这个答案更像是其他答案的替代方案)。
值得在这里提一下的是,这个解决方案通过仅在根模式下运行某个Python脚本(在PyCharm IDE内)来"攻击"这个问题,而不是整个PyCharm应用程序。
1) 禁用运行Python需要密码:
这可以通过编辑/etc/sudoers.d/python文件来实现。我们需要做的是在该文件中添加以下条目:
user host = (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 "$@"
chmod
为该脚本赋予执行权限。chmod +x python-sudo.sh
3) 使用 python-sudo.sh
脚本作为您的 PyCharm 解释器:
在 PyCharm 中转到:文件 --> 设置 --> 项目解释器
在右上角点击 "设置" 图标,然后点击 "添加本地".
在浏览选项中选择我们之前创建的 python-sudo.sh
脚本。这将使 PyCharm 具有以 root 用户身份运行 Python 脚本的特权。
4) 调试测试: 唯一剩下的工作就是在 PyCharm IDE 中实际调试特定的 Python 脚本。这可以通过右键单击要调试的脚本,然后点击 调试sample_script_to_debug.py
进行简单完成。
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用户ssh登录树莓派:
ssh root@raspberrypi
root
用户代替pi
用户,可以让你的代码以root权限运行,即使是远程执行,这是BlueZ所需要的。终端:
sudo ./Pycharm
和 @Richard 指出的类似,这里发布的回答 链接 对我有用
sudo /Applications/PyCharm.app/Contents/MacOS/pycharm on MacOS
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 "$@"