Передача переменных в вызов подпроцесса
Я пытаюсь передать свои переменные из 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"
Ответы
Ответ 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)