簡體   English   中英

在 jupyter notebook 的單元格中使用 sudo

[英]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 本身中查看命令的輸出,我更喜歡這種方法。

參考:

  1. 在 IPython 筆記本中請求密碼

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

  3. 在 Python 腳本中使用 sudo

對於 jupyter 在本地主機上運行的情況,我想指出另一種可能性:使用pkexec (或舊系統gksu )代替sudo

!pkexec apt-get install blah

這將要求在 gui 中輸入密碼來解決問題...

您可以使用 {varname} 語法將 python 變量從 notebook 傳遞到 shell,而無需導入ossubprocess模塊(例如這個很酷的博客)。

如果您已經在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM