GNU/Linux >> Znalost Linux >  >> Linux

pomocí sudo uvnitř buňky notebooku jupyter

Aktualizace: Zkontroloval jsem všechny metody, všechny fungují.

1:

Vyžádejte si heslo pomocí getpass module což v podstatě skryje vstup uživatele a poté spustí příkaz sudo v pythonu.

 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

POZNÁMKA k výše uvedeným metodám:

Pole, do kterého zadáváte heslo, se v ipythonnotebooku nemusí objevit. Objeví se v okně terminálu na Macu a představuji si, že se objeví v příkazovém shellu na PC. V terminálu se zobrazí i podrobnosti o výsledku.

3:

Své heslo si můžete uložit do mypasswordfile soubor a zadejte do buňky :

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

Tuto metodu bych preferoval, pokud chci zobrazit výstup příkazu v samotném notebooku jupyter.

Odkazy:

  1. Vyžadování hesla v notebooku IPython

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

  3. Používání sudo se skriptem Python

Proměnné pythonu můžete předávat z poznámkového bloku do shellu, aniž byste museli importovat os nebo subprocess moduly pomocí syntaxe {varname} (např. tento skvělý blog).

Pokud jste definovali heslo a proměnnou příkazu v pythonu (viz odpověď Suparshva), můžete spustit tento jednoduchý řádek:

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

Vykřičník říká jupyteru, aby jej spustil v shellu, echo příkaz pak získá skutečné heslo (např. 'funkymonkey') z proměnné nazvané password a pak to přenést do sudo'd command proměnná (což je řetězec, který popisuje příkaz shellu, např. 'apt-get update').


Můžete

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

Pokud se chcete vyhnout syntaxi pythonu, můžete si definovat vlastní buněčnou magii, která to udělá za vás (např. %sudo apt-get install bla ).


Linux
  1. Spustit příkaz Sudo a zadat heslo na stejném řádku?

  2. sudo:příkaz nenalezen

  3. Ansible:sudo bez hesla

  1. Náhrada příkazů pomocí „?

  2. příkaz nebyl nalezen při použití sudo

  3. linuxový příkaz nalezen, ale nebyl nalezen při použití sudo

  1. Příkaz Sudo po dlouhém spánku Volejte bez opětovného vyzvání hesla Sudo?

  2. Kdo je vlastníkem souboru, pokud je soubor vytvořen pomocí příkazu Sudo?

  3. Použití příkazu passwd ze skriptu shellu