Question

J'essaie d'écrire un script python qui contient nos logiciels. Ce script doit construire notre produit et le conditionner. Actuellement, nous avons d'autres scripts qui font chaque morceau individuellement, y compris les scripts csh et perl. Un de ces scripts est exécuté comme suit:

sudo mod args

où mod est un script Perl; donc en python je ferais

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

Le problème est que ce script de mod a besoin de réponses à quelques questions. Pour cela, je pensais que le traditionnel

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

fonctionnerait. Je ne pense pas que cela fonctionne car le processus contrôlé par Popen est sudo, et non le script mod qui pose la question. Existe-t-il un moyen de communiquer avec le script mod et de le lancer via sudo?

Était-ce utile?

La solution

Je choisirais d’utiliser 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')

Autres conseils

Je pense que vous devriez supprimer le sudo de votre appel Popen et demander à l'utilisateur de votre script de saisir sudo .

Cela rend en outre plus explicite le besoin de privilèges élevés dans votre script, au lieu de le cacher dans Popen .

La chose la plus simple à faire serait d’exécuter le script de contrôle (le script Python) via sudo . Pouvez-vous le faire ou n'est-ce pas une option?

Nous avons besoin de plus d'informations.

  1. sudo vous demande-t-il un mot de passe?
  2. Quel type d'interface le script mod permet-il de poser des questions?

Parce que ce genre de choses ne sont pas traitées normalement sur le tuyau.

Une solution pour ces deux solutions pourrait être Pexpect , qui est plutôt un expert en gestion de contenu drôle. des scripts qui demandent des mots de passe et divers autres problèmes d’entrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top