Самый простой способ передать аргументы дочернему процессу - это использовать параметры командной строки .
Первый шаг - переписать child.py
, чтобы он принимал аргументы командной строки.В этом вопросе содержится подробная информация об анализе аргументов командной строки: Как читать / обрабатывать аргументы командной строки? В этом простом примере мы просто получим доступ к аргументам командной строки через sys.argv
.
import sys
def main(a):
while(True):
print(a)
if __name__ == '__main__':
# the first element in the sys.argv list is the name of our program ("child.py"), so
# the argument the parent process sends to the child process will be the 2nd element
a = sys.argv[1]
main(a)
Теперь child.py
можно запустить с аргументом, подобным python child.py foobar
, а текст "foobar" будет использоваться в качестве значения для переменной a
.
После всего этого остается только переписать parent.py
и заставить передать аргумент child.py
.Рекомендуемый способ передачи аргументов с subprocess.Popen
- это список строк, поэтому мы сделаем именно это:
import time
import subprocess
def main():
while(True):
a = input("Please enter parameter to pass to subprocess:")
subprocess.Popen(["python", "child.py", a]) # pass a as an argument
print(f"{a} was started")
time.sleep(5)
if __name__ == '__main__':
main()