Передача переменных в вызов подпроцесса - PullRequest
28 голосов
/ 25 января 2011

Я пытаюсь передать переменные из raw_input в мою команду подпроцесса.Я новичок в Python.Любая помощь бы он оценил.

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

Ответы [ 5 ]

26 голосов
/ 25 января 2011

Попробуйте разделить значения запятыми:

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

См. http://docs.python.org/library/subprocess.html#subprocess.call - принимает массив, в котором первый аргумент является программой, а все остальные аргументы передаются программе в качестве аргументов.

Также не забудьте проверить возвращаемое значение функции для нулевого кода возврата, который означает «успех», если для вашего сценария не имеет значения, был ли пользователь успешно добавлен или нет.

4 голосов
/ 25 января 2011

Попробуйте добавить запятые между элементами списка:

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

subprocess.call принимает те же аргументы, что и subprocess.Popen:

args должна быть строкой или последовательностью аргументов программы.


Редактировать

Чтобы превратить все ваши аргументы в строки одновременно, вы можете составить список:

args = ['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \
        '-u' ,_userid, _username]
str_args = [ str(x) for x in args ]
0 голосов
/ 13 февраля 2019

Вы пытались просто использовать 'xxx {0}'. Format (variable) ? см. Ссылку1 или ссылку2

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

или

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

только что работал нормально для меня

0 голосов
/ 07 декабря 2017

Вы можете сначала создать строку arg, а затем просто вставить эту переменную в subprocess.call.Например:

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)
0 голосов
/ 25 января 2011
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])

Передача list в subprocess.call

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...