subprocess.Popen:如何将列表作为参数传递

时间:2013-10-30 13:35:48

标签: python 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)])

现在进程启动但它不起作用,因为它有一个字符串作为参数而不是列表。我该如何妥善解决?

2 个答案:

答案 0 :(得分:24)

使用+运算符连接它们。

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

顺便说一句,如果你想使用相同的python程序,请用"python"替换sys.executable

答案 1 :(得分:1)

感谢您快速回答falsetru。它不直接工作但我明白该怎么做。 你的建议等同于:

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

我有3个参数,这些参数是我原始列表中包含的字符串。

我在script.py文件中需要做的就是通过执行以下操作从每个参数构建一个新列表:

myList = sys.argv[1:]

myList现在与我最初的相同!

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

不知道为什么我之前没想过它!