Для передачи данных в stdin ваши настройки обычно выглядят так:
import subprocess
stdin = b"THE DATA YOU PASS"
terminal = subprocess.Popen(["lxterminal", "-e", "python3", "rfid_input.py"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = terminal.communicate(stdin)
Когда вы вызываете .communicate
без аргументов, он обычно пропускает пустые байты, что может быть и здесь.
Пример шаблона:
Родитель:
import subprocess
stdin = b"THE DATA YOU PASS"
terminal = subprocess.Popen(["python3", "stackoverflow_child.py"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = terminal.communicate(stdin)
print(stdout.decode("utf-8"), stderr.decode("utf-8"))
дочерний элемент с именем stackoverflow_child.py
:
import sys
x=input()
sys.stdout.write(x * 2) # so you can see the child was called
Если вы не хотите обрабатывать байты, вы Вы также можете передать encoding="utf-8"
в Popen, тогда вы можете передать stdin в виде строки и получить stdout и stderr в виде строки.