42 votes

Passage de variables à un appel de sous-processus

J'essaie de faire passer mes variables de raw_input à ma commande de sous-processus. Je suis novice en Python. Toute aide serait appréciée.

#!/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"

35voto

ThiefMaster Points 135805

Essayez de séparer les valeurs par des virgules :

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

Ver http://docs.python.org/library/subprocess.html#subprocess.call - Il prend un tableau où le premier argument est le programme et tous les autres arguments sont passés comme arguments au programme.

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

7voto

miku Points 63392

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 doit être une chaîne de caractères, ou un séquence des arguments du programme.


Modifier

Pour transformer tous vos arguments en chaînes de caractères en une seule fois, vous pouvez utiliser une liste de compréhension :

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

2voto

Vous pouvez d'abord créer la chaîne arg et ensuite passer cette variable dans le subprocess.call. Par exemple :

projects_csv_fn = 'projects_csv_2.csv'
prjects_json_fn = 'projects.json'

args ='python json_to_csv.py id ' + prjects_json_fn + ' ' + projects_csv_fn

subprocess.call(args, shell=True)

0voto

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

Passez un list a subprocess.call

0voto

Javier Lazaro Points 29

Avez-vous essayé d'utiliser simplement 'xxx{0}'.format(variable) ? voir lien1 ou lien2

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

o

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

ça a bien marché pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X