我只需要提示如何正确地做事。
假设我有一个名为script.py的脚本,该脚本使用名称列表作为参数[“name1”,“name2”等]。
我想使用子进程模块从另一个脚本调用此脚本。所以我想做的是:
myList = ["name1", "name2", "name3"]
subprocess.Popen(["python", "script.py", myList])
当然这不起作用,因为subprocess.Popen方法需要一个字符串列表作为参数。 所以我考虑做以下事情:
subprocess.Popen(["python", "script.py", str(myList)])
现在进程启动但它不起作用,因为它有一个字符串作为参数而不是列表。我该如何妥善解决?
答案 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"]
不知道为什么我之前没想过它!