如何将列表的每个值传递给另一个子流程?
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 docs,Popen()
的第二个参数称为bufsize
。这不是您运行正在使用的脚本的参数。相反,您将 args
作为列表传递给第一个参数:
number = '1'
p = subprocess.Popen(['python', 'script2.py', number])
请注意,您还需要传递字符串 'python'
,因为这是 运行 您的 Python 脚本的命令。
假设我有两个脚本:
#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 docs,Popen()
的第二个参数称为bufsize
。这不是您运行正在使用的脚本的参数。相反,您将 args
作为列表传递给第一个参数:
number = '1'
p = subprocess.Popen(['python', 'script2.py', number])
请注意,您还需要传递字符串 'python'
,因为这是 运行 您的 Python 脚本的命令。