[英]getting stuck at os.read() inside a fork
我使用下面的代碼創建了一個子進程,進入 ssh 容器,在子進程中運行命令並獲取其 output。
import os
import pty
def wall(host, pw):
pid, fd = pty.fork()
if pid == 0: # Child
os.execvp('ssh', ['ssh', host, 'ls', '/usr/bin/wall'])
os._exit(1) # fail to execv
# read '..... password:', write password
os.read(fd, 1024)
os.write(fd, pw + '\n')
result = []
while True:
try:
#time.sleep(1)
data = os.read(fd, 1024)
except OSError:
break
if not data:
break
result.append(data)
pid, status = os.waitpid(pid, 0)
#pid, status = os.waitpid(pid,os.WNOHANG)
return status, ''.join(result)
status, output = wall('localhost', "secret")
print status
print output
即使這在您第一次調用 wall() 時有效(或者有時在您調用 wall() 的前幾次),如果您再次調用 wall(),它會卡在 data=os.read(fd,1024) 或 os .waitpid(pid,0)。 每次我調用 wall().
注意:我不允許使用 pexpect、paramiko 等外部庫。
也許有時 os.read 不會等待密碼提示。 在這種情況下,只有兩種選擇:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.