2011-01-25 12 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

あなたはどのような問題を持っていますか?具体的にしてください。 –

+0

「be be specific」は、うまくいけば、n00bzが彼らの問題についてもう少し明確に考える方法です。 –

+1

本当に古いですが、たとえば、プライマリグループは 'primarygroup'に読み込まれていましたが、' _primarygroup'でアクセスしようとしました。 – altendky

答えて

19

カンマで値を分離してみてください。

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

http://docs.python.org/library/subprocess.html#subprocess.callを参照してください - それは、最初の引数はプログラムであり、他のすべての引数はプログラムに引数として渡される配列をとります。

はまた、ユーザーが正常かどうかを添加した場合、それはあなたのスクリプトのために重要ではありませんしない限り、「成功」を意味ゼロの戻りコードのための関数の戻り値をチェックすることを忘れないでください。

+0

私はraw_inputから与えられた値を私のサブプロセス呼び出しに渡そうとしています。 – rsouthard

3

はあなたのリスト項目間のカンマを追加してください:

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

subprocess.callsubprocess.Popenと同じ引数を取ります。

args文字列、またはプログラム引数のシーケンスでなければなりません。あなた一度文字列にすべてのあなたの引数をオンにする


編集

にできますが、リストの内包表記:

args = ['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \ 
     '-u' ,_userid, _username] 
str_args = [ str(x) for x in args ] 
+0

残念ながら_primarygroup、_secondarygroup、および_usernameの値は整数でなければなりません。 IE:useradd -g 501 -503 -u 501 – rsouthard

+0

あなたの問題はシェルにある可能性があります。プログラムやスクリプトへの引数は、文字列として渡すことしかできません(例えば、整数501の代わりに文字列 '501'が渡されます)。これらの文字列を正しい形式に解析するのは、呼び出されたプロセスです。 – Dunes

+0

引数を 'call'に渡す前に文字列に変換できます。私の編集を参照してください。 – miku

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

subprocess.call

0
listを渡します

最初に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)