• einfach_orangensaft@feddit.deOP
    link
    fedilink
    arrow-up
    23
    ·
    11 months ago

    Context:

    I have 2 Terminals open, in one is a Python Terminal Chat client running(pt3). I want to sent text from the other terminal(pt2) to the chat. It does write the text to pt3 but pt3 dosent ‘see’ the text.

    If i send over “hallo world” it prints on the terminal but dosent show up in chat.

    github of the python termina terminal chat

    • 2xsaiko@discuss.tchncs.de
      link
      fedilink
      arrow-up
      13
      ·
      11 months ago

      A PTS is a single character device. Writing to it causes output to appear on the terminal buffer, reading from it reads from the input buffer. So, writing to it like you do from a separate shell effectively does the same as calling print() from python which has it as inherited stdio. There is a way to write to a PTS input buffer but it’s not straightforward and works in a completely different way. Use something like tmux instead, or better, sockets.

    • Ook the Librarian@lemmy.world
      link
      fedilink
      arrow-up
      4
      ·
      11 months ago

      This is because the “tty” (by which I mean the device named by the output of ´tty´) is only displaying what is sent to it. Be it from the keyboard or pty2.

      The fact that the keyboard also fills an input buffer from python has to do with how python and the keyboard are attached to the same input file device which is a separate thing from them having same output file device.

      If anything that could output to tty2 could inject inputs to something using tty2 as an input buffer, that would be a security nightmare.

      Now, I’ll sit back and let Cunningham’s law kick in.

    • mvirts@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      11 months ago

      With the correct permission you should be able to write straight into pythons stdin from /proc like

      Cat whatever > /proc/$pythonpid/fd/0

    • navigatron@beehaw.org
      link
      fedilink
      arrow-up
      3
      ·
      11 months ago

      Time to dive into the wide world of VTTYs. I believe you’re writing to pts3’s output buffer - writing to its input buffer is a different virtual device / may be a process descriptor, I’m not sure. Look into the history of vttys and it should start to make sense.