Sudo pycharm.sh
を実行して、pyCharm
でrootアクセスを必要とするコードをテストしましたが、これは、私がそうすることをお勧めする方法ではありません。
PyCharmでpythonインタープリターをSudoとして実行することで、Sudo特権でデバッグできることを知っていますが、どうすればよいですか?
「Sudo python」を実行して引数を転送するシェルスクリプトを作成し、そのスクリプトをPyCharmのPythonインタープリターとして構成します。
このシェルスクリプトの名前はpython
で始まる必要があります(ソース: http://forum.jetbrains.com/message/PyCharm-424- )。
それだけの価値があるので、私は次のようにpythonスクリプトを(Ubuntu 16.04で)Sudo特権で実行しました:
スクリプトの最初の行で、次のようにインタープリターを定義します。
#!/usr/bin/Sudo python
スクリプトを実行可能にします。
chmod +x myscript.py
python
インタープリターを自分で指定せずに、スクリプトを直接実行します:
./myscript.py
私はこの問題を解決する別の方法に遭遇したので、それを共有しようと思いました(この回答は、他の回答の代わりのようなものです).
このソリューションは、ルートモードでpycharmアプリケーション全体ではなく、特定のPythonスクリプト(pycham IDE内))のみを実行することによって問題を「攻撃」することをここで言及する価値があります。
1)無効にする Pythonを実行するにはパスワードが必要:
これは、/ etc/sudoers.d/pythonファイルを編集することで実現されます。次のように、そのファイルにエントリを追加する必要があります。
ユーザー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 "$@"
このパスは、前のフェーズと同様にPythonへのパスです。
次のコマンドを使用して、このスクリプトに実行権限を与えることを忘れないでください:chmod
chmod +x python-Sudo.sh
)使用python-Sudo.sh
pycharmインタープリターとしてのスクリプト:
Pycharm内に移動:File --> Settings --> Project interpreter
右上の「設定」アイコンをクリックし、「ローカルを追加」をクリックします。
ブラウザオプションで、以前に作成したpython-Sudo.shスクリプトを選択します。これはPyCharmにpythonスクリプトをrootとして実行する特権を与えます。
4)デバッグテスト:あとは、実際にpycharm IDEの特定のPythonスクリプトをデバッグするだけです。これは、右クリックして簡単に実行できます。デバッグするスクリプト->ヒットDebug sample_script_to_debug.py
それがお役に立てば幸いです。このアプローチに誤りがあるかどうかをお知らせください。
乾杯、
男。
Raspberry PiでBluetooth関連のコードをデバッグしようとすると、同じ問題が発生しました。デバイスでリモートデバッグを実行しているので、デバイスは開発専用です。そのような場合、私の控えめなオプションでは、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"
次にRaspberry Piにログインします。
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
代わりにroot
またはpi
ユーザーを使用すると、BlueZで必要なルート権限を使用して、リモートからでもコードを実行できます。
この問題を解決するには、家に/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 "$@"