Aggiornamento: Ho controllato tutti i metodi, funzionano tutti.
1:
Richiedi la password utilizzando getpass module
che essenzialmente nasconde l'input dell'utente e quindi esegue il comando sudo in 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
NOTA per i metodi precedenti:
Il campo in cui inserisci la password potrebbe non essere visualizzato in ipythonnotebook. Appare nella finestra del terminale su un Mac e immagino che apparirà in una shell dei comandi su un PC. Anche i dettagli del risultato appariranno nel terminale.
3:
Puoi memorizzare la tua password in mypasswordfile
file e digita solo nella cella :
!sudo -S apt-get install blah < /pathto/mypasswordfile # again -S is important here
Preferirei questo metodo se voglio visualizzare l'output del comando nello stesso jupyter notebook.
Riferimenti:
-
Richiesta della password nel notebook IPython
-
https://docs.python.org/3.1/library/getpass.html
- Uso di sudo con script Python
Puoi passare le variabili python da un notebook alla shell senza importare il os
o subprocess
moduli utilizzando la sintassi {varname} (ad es. questo fantastico blog).
Se hai definito una password e una variabile di comando in python (vedi la risposta di Suparshva), puoi eseguire questo one-liner:
!echo {password}|sudo -S {command}
Il punto esclamativo dice a jupyter di eseguirlo nella shell, il echo
comando otterrà quindi la vera password (ad es. 'funkymonkey') dalla variabile chiamata password
e quindi convogliarlo nel sudo'd command
variabile (che è una stringa che descrive un comando della shell, ad esempio 'apt-get update').
Puoi
subprocess.Pope(['sudo', 'apt-get', 'install', 'bla'])
Se vuoi evitare la sintassi di Python, puoi definire la tua magia cellulare che lo fa per te (ad es. %sudo apt-get install bla
).