2011-01-25 40 views
18

我想將我的變量從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" 
+4

你有什麼問題?請具體說明。 – 2011-01-25 15:19:19

+0

「具體」是 - 希望 - 讓n00bz更清楚地思考他們的問題。 – 2011-01-25 16:04:04

+1

真的很古老,但我會注意到,例如,主要羣組被讀入`primarygroup`,但隨後嘗試通過`_primarygroup`訪問。 – altendky 2017-09-15 12:55:33

回答

19

嘗試用逗號分隔的值:

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

參見http://docs.python.org/library/subprocess.html#subprocess.call - 它帶有一個陣列,其中第一個參數是該程序和所有其他參數作爲參數傳遞給程序。

此外,不要忘記檢查函數的返回值爲零代碼,這意味着「成功」,除非你的腳本,如果用戶添加成功與否並不重要。

3

嘗試列表項之間添加逗號:

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
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username]) 

傳遞一個listsubprocess.call

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)