Domanda

Sto cercando di scrivere uno script Python che comprime il nostro software. Questo script deve creare il nostro prodotto e confezionarlo. Attualmente abbiamo altri script che eseguono ogni pezzo individualmente che includono script csh e perl. Uno di questi script viene eseguito come:

sudo mod args

dove mod è uno script perl; quindi in Python lo farei

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)

Il problema è che questo script mod necessita di alcune risposte. Per questo ho pensato che il tradizionale

(stdout, stderr) = proc.communicate(input='y')

funzionerebbe. Non penso che funzioni perché il processo che Popen sta controllando è sudo, non lo script mod che sta ponendo la domanda. Esiste un modo per comunicare con lo script mod e comunque eseguirlo tramite sudo?

È stato utile?

Soluzione

Sceglierei di andare con Pexpect.

import pexpect
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
child.expect ('First question:')
child.sendline ('Y')
child.expect ('Second question:')
child.sendline ('Yup')

Altri suggerimenti

Penso che dovresti rimuovere il sudo nella tua chiamata Popen e richiedere all'utente del tuo script di digitare sudo .

Questo rende ulteriormente esplicita la necessità di privilegi elevati nel tuo script, invece di nasconderlo all'interno di Popen .

La cosa più semplice da fare sarebbe eseguire lo script di controllo (lo script Python) tramite sudo . Sei in grado di farlo o non è un'opzione?

Abbiamo bisogno di maggiori informazioni.

  1. Sudo ti sta chiedendo una password?
  2. Che tipo di interfaccia ha lo script mod per porre domande?

Perché questo tipo di cose non sono gestite normalmente sulla pipe.

Una soluzione per entrambi potrebbe essere Pexpect , che è piuttosto esperto nel gestire divertenti script che richiedono password e vari altri problemi di input.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top