![](/img/trans.png)
[英]How to create a new jupyter notebook cell and update the cell using notebook server rest api's or python code?
[英]using sudo inside jupyter notebook's cell
我正在嘗試為 jupyter 筆記本中的平台制作教程
在某些時候,我需要像這樣在單元格中運行 linux 命令:
!sudo apt-get install blah
但不知道如何進入 sudo pass,我不想用 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 的命令 shell 中。 甚至結果詳細信息也會出現在終端中。
3:
您可以將密碼存儲在mypasswordfile
文件中,只需在單元格中鍵入:
!sudo -S apt-get install blah < /pathto/mypasswordfile # again -S is important here
如果我想在 jupyter notebook 本身中查看命令的輸出,我更喜歡這種方法。
參考:
您可以使用 {varname} 語法將 python 變量從 notebook 傳遞到 shell,而無需導入os
或subprocess
模塊(例如這個很酷的博客)。
如果您已經在 python 中定義了密碼和命令變量(請參閱 Suparshva 的回答),那么您可以運行這個單行代碼:
!echo {password}|sudo -S {command}
感嘆號告訴 jupyter 在 shell 中運行它,然后echo
命令將從名為password
的變量中獲取真實密碼(例如'funkymonkey'),然后將其通過管道傳遞到 sudo'd command
變量(這是一個字符串,描述shell 命令,例如“apt-get update”)。
你可以
subprocess.Pope(['sudo', 'apt-get', 'install', 'bla'])
如果你想避免 python 語法,你可以定義你自己的單元格魔法來為你做這件事(例如%sudo apt-get install bla
)。
如果您不想將密碼存儲在某個地方,您可以這樣寫:
from getpass import getpass
!echo {getpass()} | sudo -S {command}
PS 這也回答了 Ian Danforth 的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.