Как я могу передать каждое значение списка в другой подпроцесс? - PullRequest
0 голосов
/ 31 марта 2020

Предположим, у меня есть два сценария:

#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 и переполнение стека и пока не могу найти то, что ищу.

ПРИМЕЧАНИЕ: Я использую этот код для более крупной программы, использующей tkinter GUI и строка кода subprocess.Popen, когда она выполняется, открывает другое окно tkinter для каждого подпроцесса, а не просто запускает другой скрипт.

Вся помощь приветствуется, и я благодарю весь этот ответ.

ОБНОВЛЕНИЕ: Когда я выполняю скрипт следующим образом:

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)

Не совсем уверен, как это исправить. Это заканчивает тем, что разбил мой р c.

1 Ответ

0 голосов
/ 31 марта 2020

Согласно документам , второй параметр Popen() называется bufsize. Это не параметр вашего скрипта, который вы запускаете. Вместо этого вы передаете args в виде списка первому параметру:

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

Обратите внимание, что вам также нужно передать строку 'python', так как это команда, которая будет запускать ваш скрипт Python.

...