Подтвердить что ты не робот

Передача переменных в вызов подпроцесса

Я пытаюсь передать свои переменные из 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\ primary group?"
primarygroup = int(raw_input('Enter group: '))
print "\nWhat is the user\ 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"
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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 ]

Ответ 3

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

Передайте a list в subprocess.call

Ответ 4

Сначала вы можете создать строку 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)