17

我只需要一个关于如何正确做事的提示。

假设我有一个名为 script.py 的脚本,它使用名称列表作为参数 [“name1”、“name2”等]。

我想使用 subprocess 模块从另一个脚本调用这个脚本。所以我想做的是以下几点:

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

当然这不起作用,因为 subprocess.Popen 方法需要一个字符串列表作为参数。所以我考虑做以下事情:

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

现在该过程开始了,但它不起作用,因为它有一个字符串作为参数,而不是一个列表。我应该如何正确解决这个问题?

4

2 回答 2

37

使用运算符连接它们+

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

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

于 2013-10-30T13:36:24.080 回答
3

感谢您的快速回答 falsetru。它不能直接工作,但我知道该怎么做。你的建议相当于做:

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

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

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

myList = sys.argv[1:]

myList 现在与我最初拥有的相同!

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

不知道为什么我没有早点考虑!

于 2013-10-30T13:52:13.627 回答