我想从Python调用一个程序,并让它相信stdout即使Python的进程stdout附加到管道上它也是一个tty.所以我使用该pty.spawn函数来实现这一点,可以从以下方面进行验证:
$ python -c "import sys; from subprocess import call; call(sys.argv[1:])" python -c "import sys; print sys.stdout.isatty()" | cat
False
$ python -c "import sys; import pty; pty.spawn(sys.argv[1:])" python -c "import sys; print sys.stdout.isatty()" | cat
True
Run Code Online (Sandbox Code Playgroud)
(我们看到在第二个命令中我们已经实现了我们的目标,即生成的进程被欺骗认为它的标准输出是tty.)
但问题是如果我们使用pty.spawn那么它的输入不会被回显,而是被重定向到主的标准输出.这可以通过以下命令看到:
$ python -c "import sys; import pty; pty.spawn(sys.argv[1:])" cat > out.txt
$ # Typed "hello" in input, but that is not echoed (use ^D to exit). It is redirected to output.txt
$ cat out.txt
hello …Run Code Online (Sandbox Code Playgroud)