我正在尝试将变量从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"
答案 0 :(得分:26)
尝试用逗号分隔值:
subprocess.call(['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])
参见http://docs.python.org/library/subprocess.html#subprocess.call - 它需要一个数组,其中第一个参数是程序,所有其他参数作为参数传递给程序。
另外,不要忘记检查函数的返回值是否为零返回代码,这意味着“成功”,除非成功添加用户对您的脚本无关紧要。
答案 1 :(得分:4)
尝试在列表项之间添加逗号:
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 ]
答案 2 :(得分:1)
您也可以使用f字符串。
import subprocess
site = 'google.com'
subprocess.run(['nslookup', f'{site}'])
答案 3 :(得分:0)
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username])
将list
传递给subprocess.call
答案 4 :(得分:0)
您可以先创建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)
答案 5 :(得分:0)
您是否尝试过仅使用'xxx {0}'。format(variable)? see link1 or link2
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)])
对我来说一切正常