Actualización: Revisé todos los métodos, todos funcionan.
Solicitar contraseña usando getpass module
que esencialmente oculta la entrada del usuario y luego ejecuta el comando sudo en 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))
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
NOTA para los métodos anteriores:
Es posible que el campo donde ingresa la contraseña no aparezca en el ipythonnotebook. Aparece en la ventana de la terminal en una Mac, e imagino que aparecerá en un shell de comandos en una PC. Incluso los detalles de los resultados aparecerían en la terminal.
Puede almacenar su contraseña en mypasswordfile
archivo y simplemente escriba en la celda:
!sudo -S apt-get install blah < /pathto/mypasswordfile # again -S is important here
Preferiría este método si quiero ver el resultado del comando en el propio cuaderno jupyter.
Referencias:
-
Solicitando contraseña en notebook IPython
-
https://docs.python.org/3.1/library/getpass.html
- Uso de sudo con secuencias de comandos de Python
Puede pasar variables de python desde un cuaderno al shell sin importar el os
o subprocess
módulos mediante el uso de la sintaxis {varname} (por ejemplo, este blog genial).
Si ha definido una contraseña y una variable de comando en python (consulte la respuesta de Suparshva), puede ejecutar esta línea:
!echo {password}|sudo -S {command}
El signo de exclamación le dice a jupyter que lo ejecute en el shell, el echo
El comando obtendrá la contraseña real (por ejemplo, 'funkymonkey') de la variable llamada password
y luego canalícelo en el sudo'd command
variable (que es una cadena que describe un comando de shell, por ejemplo, 'apt-get update').
Puedes
subprocess.Pope(['sudo', 'apt-get', 'install', 'bla'])
Si desea evitar la sintaxis de python, puede definir su propia celda mágica que lo haga por usted (por ejemplo, %sudo apt-get install bla
).