web-dev-qa-db-ja.com

subprocess.Popen:リストを引数として渡す方法

私は物事を適切に行う方法についてのヒントが必要です。

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

サブプロセスモジュールを使用して、別のスクリプトからこのスクリプトを呼び出したいと思います。だから私がやりたいのは次のとおりです:

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

もちろん、subprocess.Popenメソッドは引数として文字列のリストを必要とするため、これは機能しません。だから私は次のことをすることを考えました:

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

これでプロセスが開始されますが、引数として文字列があり、リストがないため、機能しません。どうすれば適切に修正できますか?

11
Serge

+演算子を使用してそれらを連結します。

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

ところで、同じpythonプログラムを使用したい場合は、"python"sys.executableに置き換えてください。

27
falsetru

クイックアンサーfalsetruをありがとう。直接は機能しませんが、その方法は理解しています。あなたの提案は行うことと同等です:

subprocess.Popen(["Python","script.py","name1","name2","name3"])

元のリストに含まれている文字列である3つの引数があります。

Script.pyファイルで行う必要があるのは、次の手順を実行して、受け取った各引数から新しいリストを作成することだけです。

myList = sys.argv[1:]

myListは、最初に持っていたものと同じになりました。

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

なぜ私が以前にそれについて考えなかったのかわからない!

1
Serge