web-dev-qa-db-ja.com

変数をサブプロセス呼び出しに渡す

変数を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"
29
rsouthard

値をコンマで区切ってみてください:

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

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

また、ユーザーが正常に追加されたかどうかがスクリプトにとって重要でない限り、「成功」を意味するゼロ戻りコードの関数の戻り値を確認することを忘れないでください。

27
ThiefMaster

リスト項目の間にコンマを追加してみてください:

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

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

argsは文字列、またはプログラム引数のsequenceでなければなりません。


編集

すべての引数を一度に文字列に変換するには、リストを理解できます。

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

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

listsubprocess.callに渡す

0
user225312

使ってみましたか 'xxx {0}'。format(変数) ? link1を参照または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)])

うまくいった

0
Javi