小编Abh*_*dia的帖子

Python pty.spawn stdin没有回显但重定向到master的stdout

我想从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)

python linux bash stdin pty

6
推荐指数
1
解决办法
1277
查看次数

标签 统计

bash ×1

linux ×1

pty ×1

python ×1

stdin ×1