为什么subprocess.Popen(" ssh ...",preexec_fn = os.setpgrp)在按回车时停止/挂起?

时间:2015-09-18 22:31:03

标签: python linux ssh subprocess

我在下面描述的特定情况下观察以下脚本:

#!/usr/bin/env python

import os
import subprocess as sp
import time

tres = 0.1
time.sleep(2)

user_at_host = "user@host"

child_proc = sp.Popen(["ssh", "-q", user_at_host, "ls"], preexec_fn=os.setpgrp)

while(child_proc.poll() is None):
    time.sleep(tres)

当我使用有效的" user @ host"运行脚本时,我通常只是从" ls"得到输出,但如果我在&之前按Enter / Return键#34;睡眠(2)"当我们到达" ls"它结束时,它会挂起(没有输出)子流程,我必须打断它。

ps aux | grep ls
user  14216  0.0  0.0   6844  2856 pts/27   T    18:18   0:00 ssh -q user@host ls

正如你所看到的那样"停止"州。

如果我不使用" preexec_fn = os.setpgrp",则没有挂起。

另外,如果我用本地ls调用替换远程ssh / ls调用,则没有挂起。

有关为何发生这种情况的任何想法?

编辑: ssh的认证通过公钥进行。 进程挂起/停止时没有输出。 我使用的是python 2.4.3,但也观察到了2.6.6中的问题。

0 个答案:

没有答案