如何将列表的每个值传递给另一个子流程?

How can I pass each value of a list to another subprocess?

假设我有两个脚本:

#script1.py
import subprocess
numbers = ['1', '2', '3']

for number in numbers:
    p = subprocess.Popen('script2.py', number)

其他脚本:

#script2.py
import subprocess
from script1 import *

number = sys.argv[1]

print(number)

错误信息(当我运行 script1.py):

Traceback (most recent call last):
  File "script1.py", line 6, in <module>
p = subprocess.Popen('script2.py', number)
  File "C:\Users\hacke\AppData\Local\Programs\Python\Python38- 
32\lib\subprocess.py", line 753, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer

我希望此程序打开 3 个子进程,其中 1 个子进程编号 =“1”,另一个子进程编号 =“2”,另一个子进程编号 =“3”。我已经查看了 python 文档和 Whosebug,但我还没有找到我要找的东西。

注意: 我正在将此代码用于一个更大的程序,该程序使用 tkinter GUI 和 subprocess.Popen 行代码,在执行时,打开另一个 tkinter window 对于每个子进程,而不仅仅是 运行 宁另一个脚本。

感谢所有帮助,感谢所有回复。

更新: 当我以这种方式执行脚本时:

numbers = ['1', '2', '3']

for number in numbers:
    p = subprocess.Popen(['python', 'script2.py', number])

它确实将变量正确地传递给 script2.py,但会无限执行脚本,结果是这样的输出:

1
2
3
1
2
3(continuing the pattern)

不太确定如何解决这个问题。这最终导致我的电脑崩溃。

根据the docsPopen() 的第二个参数称为bufsize。这不是您运行正在使用的脚本的参数。相反,您将 args 作为列表传递给第一个参数:

number = '1'
p = subprocess.Popen(['python', 'script2.py', number])

请注意,您还需要传递字符串 'python',因为这是 运行 您的 Python 脚本的命令。