【发布时间】:2013-03-04 11:40:02
【问题描述】:
我编写了一个简单的包装脚本,用于在命令失败时重复命令,称为retry.py。但是,当我想查看子命令的输出时,我不得不使用一些 pty 技巧。这适用于 rsync 等程序,但 scp 等其他程序应用额外测试来显示进度表等内容。
scp 代码有一个广泛的测试:
getpgrp() == tcgetpgrp(STDOUT_FILENO);
当我通过包装脚本运行时失败。正如您在我的简单 tty_test.c 测试用例中看到的那样:
./tty_tests
isatty reports 1
pgrps are 13619 and 13619
和:
./retry.py -v -- ./tty_tests
command is ['./tty_tests']
isatty reports 1
pgrps are 13614 and -1
child finished: rc = 0
Ran command 1 times
我尝试使用 tcsetpgrp(),它最终作为 pty fd 上的 IOCTL,但会导致 pty 的 -EINVAL。如果可能的话,我宁愿继续使用 Python 子进程机制,还是需要手动 fork/execve'ing?
【问题讨论】:
标签: python posix subprocess pty posix-api