Нужно ли использовать код оболочки оболочки? Если вы можете явно вызывать код Python в my_child.py
в my_parent.py
, то это должно быть проще (т.е.
в основном только трубы пример ).
Предполагая, что вы не можете этого сделать, можно создать именованный канал аналогичным образом, но более явно, используя mkfifo
и просто передавая имя канала.
Я должен был добавить строку shebang на .sh
, но в противном случае вот пример:
# my_parent.py
from threading import Thread
import os
import subprocess
pipename = 'mypipe'
try:
os.mkfifo(pipename)
except FileExistsError:
pass
# start child
def run_child():
subprocess.check_call(['/MYPATH/my_child_wrapper.sh', pipename])
Thread(target=run_child).start()
# send data
with open(pipename, 'wb') as p:
p.write(b'Something')
А потом дочерний код:
# my_child.py
import os
import sys
pipename = sys.argv[1]
while True:
with open(pipename, 'rb') as p:
print(p.read())
Это версия ОС, о которой вы спрашивали, так что, надеюсь, это интересно, но не является простым решением того, что вы спрашивали о том, что делаете.