GNU/Linux >> Linux の 問題 >  >> Linux

jupyterノートブックのセル内でsudoを使用する

更新: すべてのメソッドを確認しましたが、すべて機能しています。

1:

getpass module を使用してパスワードを要求する これは基本的にユーザーによる入力を隠し、Python で sudo コマンドを実行します。

 import getpass
 import os

 password = getpass.getpass()
 command = "sudo -S apt-get update" #can be any command but don't forget -S as it enables input from stdin
 os.system('echo %s | %s' % (password, command))

2:

 import getpass
 import os

 password = getpass.getpass()
 command = "sudo -S apt-get update" # can be any command but don't forget -S as it enables input from stdin
 os.popen(command, 'w').write(password+'\n') # newline char is important otherwise prompt will wait for you to manually perform newline

上記の方法に関する注意:

<ブロック引用>

パスワードを入力するフィールドは、ipythonnotebook に表示されない場合があります。 Mac のターミナル ウィンドウに表示され、PC のコマンド シェルに表示されると思います。結果の詳細も端末に表示されます。

3:

パスワードは mypasswordfile に保存できます ファイルを開き、セルに入力するだけです:

!sudo -S apt-get install blah < /pathto/mypasswordfile # again -S is important here

コマンドの出力を jupyter ノートブック自体で表示したい場合は、この方法をお勧めします。

参考文献:

<オール>
  • IPython ノートブックでパスワードをリクエストする

  • https://docs.python.org/3.1/library/getpass.html

  • Python スクリプトで sudo を使用する

  • os をインポートせずに、ノートブックからシェルに Python 変数を渡すことができます。 または subprocess {varname} 構文を使用してモジュールを作成します (例:このクールなブログ)。

    Python でパスワードとコマンド変数を定義している場合 (Suparshva の回答を参照)、このワンライナーを実行できます:

    !echo {password}|sudo -S {command}
    

    感嘆符は、jupyter にシェル、echo で実行するように指示します。 コマンドは、password という変数から実際のパスワード (例:'funkymonkey') を取得します。 そして、それを sudo'd command にパイプします 変数 (これは、シェル コマンドを説明する文字列です。たとえば、「apt-get update」)。


    できます

    subprocess.Pope(['sudo', 'apt-get', 'install', 'bla'])
    

    Python 構文を避けたい場合は、それを行う独自のセル マジックを定義できます (例:%sudo apt-get install bla ).


    Linux
    1. 「?」を使用したコマンド置換

    2. Sudoコマンドを使用してファイルを作成した場合、ファイルの所有者は誰ですか?

    3. sudo:コマンドが見つかりません

    1. シェルスクリプト内から passwd コマンドを使用する

    2. Ansible:パスワードなしの sudo

    3. sudoの使用時にlinuxコマンドが見つかりましたが見つかりませんでした

    1. sudo の使用時にコマンドが見つからない

    2. Linux で SSH を使用して root として自動コマンド実行を許可する

    3. パスワードなしでsshコマンドをsudoコマンドをリモートで実行する方法