web-dev-qa-db-ja.com

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

私はjupyterノートブック内のプラットフォームのチュートリアルを作成しようとしています

ある時点で、次のようなセル内でLinuxコマンドを実行する必要があります。

!Sudo apt-get install blah

しかし、Sudoパスを入力する方法がわかりません。私はSudoでjupyter Notebookを実行したくないのですが、これを行う方法はありませんか?

6
mj sameri

更新:私はすべてのメソッドをチェックしましたが、すべてが機能しています。


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

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

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

3:

パスワードをmypasswordfileファイルに保存し、セルに入力するだけです。

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

Jupyter Notebook自体でコマンドの出力を表示する場合は、この方法を使用します。

参照:

  1. IPythonノートブックでのパスワードの要求

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

  3. PythonスクリプトでSudoを使用
13
Suparshva

あなたはできる

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

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

2
user2722968

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

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

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

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

2
Sam Murphy