在jupyter notebook的单元格中使用sudo

mj *_*eri 3 python linux ubuntu python-3.x jupyter-notebook

我正在尝试为jupyter笔记本中的平台制作教程

在某些时候我需要在这样的单元格中运行linux命令:

!sudo apt-get install blah
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚如何进入sudo通行证,我不想用sudo运行jupyter笔记本,任何想法如何做到这一点?

Sup*_*hva 10

更新:我检查了所有方法,所有方法都正常.


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))
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

以上方法的注意事项:

输入密码的字段可能不会出现在ipython笔记本中.它出现在mac的终端窗口中,我想它会出现在PC上的命令shell中.甚至结果细节也会出现在终端中.

3:

您可以将密码存储在mypasswordfile文件中,只需键入单元格:

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

如果我想查看jupyter笔记本本身的命令输出,我更喜欢这种方法.

参考文献:

  1. 在IPython笔记本中请求密码

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

  3. 在Python脚本中使用sudo


ntg*_*ntg 8

我想指出 jupyter 在 localhost 上运行的情况的另一种可能性:使用pkexec(或对于旧系统gksu)而不是sudo :

!pkexec apt-get install blah
Run Code Online (Sandbox Code Playgroud)

这将在解决问题的图形用户界面中询问密码......

  • 最好的答案。 (2认同)

Sam*_*phy 6

您可以使用 {varname} 语法将 python 变量从笔记本传递到 shell,而无需导入os或模块(例如,这个很酷的博客)。subprocess

如果您在 python 中定义了密码和命令变量(请参阅 Suparshva 的答案),那么您可以运行此单行代码:

!echo {password}|sudo -S {command}
Run Code Online (Sandbox Code Playgroud)

感叹号告诉 jupyter 在 shell 中运行它,echo然后该命令将从调用的变量中获取真实密码(例如“funkymonkey”)password,然后将其通过管道传输到 sudo'dcommand变量(这是一个描述 shell 命令的字符串) ,例如“apt-get update”)。