использование sudo внутри ячейки ноутбука jupyter

Я пытаюсь сделать учебник для платформы внутри jupyter notebook

в какой-то момент мне нужно запустить команду linux внутри ячейки следующим образом:

!sudo apt-get install blah 

но не могу понять, как войти в sudo pass, и я не хочу запускать jupyter notebook с sudo, любую идею, как это сделать?

Обновление: я проверил все методы, все они работают.


1:

Запросить пароль, используя getpass module который по существу скрывает вход пользователя, а затем запускает команду sudo в python .

  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, и я думаю, он появится в командной оболочке на ПК. Даже детали результата появятся в терминале.

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. Использование sudo с скриптом Python

Вы можете

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

Если вы хотите избежать синтаксиса python, вы можете определить свою собственную клеточную магию, которая сделает это для вас (например, %sudo apt-get install bla ).

Вы можете передавать переменные python из ноутбука в оболочку, не импортируя модули os или subprocess , используя синтаксис {varname} (например, этот classный блог ).

Если вы определили пароль и командную переменную в python (см. Ответ Suparshva), вы можете запустить этот однострочный:

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

Восклицательный знак подсказывает jupyter запустить его в оболочке, затем команда echo получит реальный пароль (например, «funkymonkey») из переменной, называемой password а затем передаст ее в command переменную sudo’d (которая представляет собой строку, которая описывает команда оболочки, например «apt-get update»).