nix-files/hosts/common/programs/unl0kr/redirect-tty

31 lines
824 B
Python
Executable File

#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p "python3.withPackages (ps: [ ])"
# vim: set filetype=python :
"""
launch some program, and redirect its output to appear as if it
were *input* by the user, on some TTY.
this allows piping into programs which expect to be running directly on a TTY (like `login`, or `sway`).
based on: <https://unix.stackexchange.com/a/345572>
"""
import fcntl
import subprocess
import sys
import termios
def write_to(text: bytes, dest_path: str) -> None:
with open(dest_path, "w") as f:
for byte in text:
fcntl.ioctl(f.fileno(), termios.TIOCSTI, bytes([byte]))
def main(argv: list[str]):
dest_path = argv[1]
cmd = argv[2:]
cmd_output = subprocess.check_output(cmd)
write_to(cmd_output, dest_path)
if __name__ == "__main__":
main(sys.argv)