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"
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.
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 ]
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])
Passer une list
à subprocess.call
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