为什么我不能使用subprocess.Popen与SSH交互?

时间:2017-06-24 03:21:01

标签: python ssh subprocess

我尝试使用Python的subprocess库与SSH进行交互。这是我目前的代码:

import subprocess
import time
proc = subprocess.Popen(["ssh", "-tt", "user@host"],
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE)
time.sleep(10)
proc.stdin.write(b"ls\n")
while True:
    next_line = proc.stdout.readline()
    if next_line != '':
        print(next_line.decode("utf-8"), end='')
    else:
        time.sleep(.01)

当我运行它时,我得到了通常的SSH安全标语,但没有别的。我通过公钥登录并已将主机添加到我的known_hosts列表中,因此我认为身份验证不应成为问题。通过将ls更改为将文本写入文件的命令,我已经确认没有命令经过。"通过。有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可能需要致电proc.stdin.flush()。更一般地说,你应该使用Paramiko代替,这是一个直接用于SSH的Python库,而不是使用Popen。