Mise à jour : J'ai vérifié toutes les méthodes, elles fonctionnent toutes.
1 :
Demander un mot de passe en utilisant getpass module
qui masque essentiellement l'entrée par l'utilisateur, puis exécute la commande 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))
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
REMARQUE pour les méthodes ci-dessus :
Le champ où vous entrez le mot de passe peut ne pas apparaître dans le ipythonnotebook. Il apparaît dans la fenêtre du terminal sur un mac, et j'imagine qu'il apparaîtra dans un shell de commande sur un PC. Même les détails du résultat apparaîtraient dans le terminal.
3 :
Vous pouvez stocker votre mot de passe dans mypasswordfile
fichier et tapez simplement dans la cellule :
!sudo -S apt-get install blah < /pathto/mypasswordfile # again -S is important here
Je préférerais cette méthode si je veux afficher la sortie de la commande dans le cahier jupyter lui-même.
Références :
-
Demande de mot de passe dans le bloc-notes IPython
-
https://docs.python.org/3.1/library/getpass.html
- Utiliser sudo avec un script Python
Vous pouvez passer des variables python d'un cahier au shell sans importer le os
ou subprocess
modules en utilisant la syntaxe {varname} (par exemple, ce blog sympa).
Si vous avez défini un mot de passe et une variable de commande en python (voir la réponse de Suparshva), vous pouvez exécuter ce one-liner :
!echo {password}|sudo -S {command}
Le point d'exclamation indique à jupyter de l'exécuter dans le shell, le echo
la commande obtiendra alors le vrai mot de passe (par exemple 'funkymonkey') à partir de la variable appelée password
puis dirigez-le dans le sudo'd command
variable (qui est une chaîne qui décrit une commande shell, par exemple 'apt-get update').
Vous pouvez
subprocess.Pope(['sudo', 'apt-get', 'install', 'bla'])
Si vous voulez éviter la syntaxe python, vous pouvez définir votre propre cellule magique qui le fait pour vous (par exemple %sudo apt-get install bla
).