我在Linux中有一个创建ssh密钥的工作脚本。在macOS中,它挂起在wait()上
import os
import sys
import pexpect
passphrase = os.environ['HOST_CA_KEY_PASSPHRASE']
command = 'ssh-keygen'
child = pexpect.spawn(command, args=sys.argv[1:])
child.expect('Enter passphrase:')
child.sendline(passphrase)
child.wait()
最后,我发现了问题所在。看起来
ssh-keygen
二进制文件略有不同,它会在之后输出一些东西因为wait()是一个阻塞调用
这将不会从子级读取任何数据,因此如果子级有未读的输出并已终止,这将永远阻止。换句话说,子级可能已打印输出,然后称为exit(),但在父级读取其输出之前,子级在技术上仍然处于活动状态
.wait()docs here
要解决此问题,read_非阻塞从子应用程序读取最多大小的字符。如果有可立即读取的字节,则将读取所有这些字节(直到缓冲区大小)
.read_nonblocking()docs here
工作溶液
相关问题 更多 >
编程相关推荐