2013-10-30 8 views
8

正しく処理するにはヒントが必要です。subprocess.Popen:引数としてリストを渡す方法

私はscript.pyという名前のスクリプトを引数["name1"、 "name2"など]として使用しています。

このスクリプトは、サブプロセスモジュールを使用して別のスクリプトから呼び出す必要があります。 subprocess.Popenメソッドは、引数として文字列のリストを必要とするために動作しませんもちろん

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py", myList]) 

:だから私はやりたいことは以下の通りです。 だから私は、次のことをやってみなさ:

subprocess.Popen(["python", "script.py", str(myList)]) 

今、プロセスは開始しますが、それは、引数ではなく、リストとして文字列を持っているので、それは動作しません。それをどうやって修正すればい​​いですか?

答えて

19

+演算子を使用して連結します。あなたが同じのpythonプログラムを使用したい場合は

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py"] + myList) 

ところで、sys.executable"python"を交換してください。

+0

または '.extend()'それはあなたが追加引数の型について確信が持てない場合です。 –

+0

@NiklasR、 '+ list(myList)' – falsetru

+1

'extend'は、呼び出しの前に名前付きリストを変更する場合にのみ便利です。 'subprocess.Popen([" python "、" script.py "]。extend(myList)))' Popen() 'の最初の唯一の引数として' None'( 'extend'の戻り値)を渡します。 – chepner

1

素早く答えてくれてありがとうございます。それは直接動作しませんが、私は行う方法を理解しています。 あなたが提案していることに相当します。

私は私の元のリストに含まれる文字列である3つの引数を持つ
subprocess.Popen(["Python","script.py","name1","name2","name3"]) 

私はscript.pyファイルにやらなければならないことは、次の手順を実行して、受信した各引数から新しいリストを構築することです:

myList = sys.argv[1:] 

はmyListは今、私が最初に持っていたものよりも同じです!

["name1","name2","name3"] 

私が以前にそれについて考えなかった理由はわかりません!

関連する問題