web-dev-qa-db-fra.com

Passer des variables à un appel de sous-processus

J'essaie de passer mes variables de raw_input à ma commande de sous-processus. Je suis nouveau sur Python. Toute aide serait-il apprécié. 

#!/usr/bin/python

import subprocess

print "\nWhat user name"
username = str(raw_input('username: '))
print "\nWhat is the user id"
userid = int(raw_input('Enter user id: '))
print "\nWhat is the user\'s primary group?"
primarygroup = int(raw_input('Enter group: '))
print "\nWhat is the user\'s secondary group?"
secondarygroup = int(raw_input('Enter group: '))

subprocess.call(['useradd' '-m' '-g' _primarygroup '-G' _secondarygroup '-u' _userid _username])

print"\nThe user has been added"
25
rsouthard

Essayez de séparer les valeurs avec des virgules:

subprocess.call(['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])

Voir http://docs.python.org/library/subprocess.html#subprocess.call - Il prend un tableau dans lequel le premier argument est le programme et tous les autres arguments sont transmis comme arguments au programme.

N'oubliez pas non plus de vérifier la valeur de retour de la fonction pour un code de retour égal à zéro, ce qui signifie "succès", sauf si votre script a de l'importance si l'utilisateur a été ajouté avec succès ou non.

24
ThiefMaster

Essayez d'ajouter des virgules entre les éléments de votre liste:

subprocess.call(['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \
                 '-u' ,_userid, _username])

subprocess.call prend les mêmes arguments que subprocess.Popen :

args devrait être une chaîne ou un sequence d'arguments de programme.


Modifier

Pour transformer tous vos arguments en chaînes à la fois, vous pourriez avoir une compréhension de la liste:

args = ['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \
        '-u' ,_userid, _username]
str_args = [ str(x) for x in args ]
3
miku
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])

Passer une list à subprocess.call

0
user225312

as-tu juste essayé d'utiliser 'xxx {0}'. format (variable) ? voir lien1ou lien2

subprocess.run(['useradd', '-m', '-g {0}'.format(_primarygroup), '-G {0}'.format(_secondarygroup), '-u {0}'.format(_userid)], capture_output=True)

ou

subprocess.call(['useradd', '-m', '-g {0}'.format(_primarygroup), '-G {0}'.format(_secondarygroup), '-u {0}'.format(_userid)])

juste travaillé bien pour moi

0
Javi