将变量传递给子进程调用

47 投票
6 回答
154231 浏览
提问于 2025-04-16 10:35

我想把我从 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"

6 个回答

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)
8

试着在你的列表项之间加上逗号:

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 ]
40

试着用逗号把值分开:

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

可以看看这个链接 http://docs.python.org/library/subprocess.html#subprocess.call - 这个函数需要一个数组,第一个元素是程序的名字,后面的元素都是传给这个程序的参数。

另外,别忘了检查这个函数的返回值,如果返回值是零,那就表示“成功”,除非在你的脚本中,用户是否成功添加并不重要。

撰写回答