私はjupyterノートブック内のプラットフォームのチュートリアルを作成しようとしています
ある時点で、次のようなセル内でLinuxコマンドを実行する必要があります。
!Sudo apt-get install blah
しかし、Sudoパスを入力する方法がわかりません。私はSudoでjupyter Notebookを実行したくないのですが、これを行う方法はありませんか?
更新:私はすべてのメソッドをチェックしましたが、すべてが機能しています。
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自体でコマンドの出力を表示する場合は、この方法を使用します。
参照:
あなたはできる
subprocess.Pope(['Sudo', 'apt-get', 'install', 'bla'])
python構文を避けたい場合は、それを行う独自のセルマジックを定義できます(例:%Sudo apt-get install bla
)。
{varname}構文を使用して、os
またはsubprocess
モジュールをインポートせずに、ノートブックからシェルにpython変数を渡すことができます(例 このクールなブログ )。
python(Suparshvaの回答を参照))でパスワードとコマンド変数を定義している場合は、次のワンライナーを実行できます。
!echo {password}|Sudo -S {command}
感嘆符は、シェルで実行するようにjupyterに指示します。echo
コマンドは、password
という変数から実際のパスワード(たとえば、 'funkymonkey')を取得し、それをSudoにパイプします。 d command
変数(シェルコマンドを説明する文字列です。例: 'apt-get update')。