使用 subprocess 在 python 中执行 linux 命令,然后获取结果提示
Using subprocess to execute a linux command in python and then grab the resulting prompt
我在 python 中使用 subprocces.Popen() 到 运行 linux 命令。
我正在尝试使用此命令通过 ssh 连接到另一台机器,并查看它是否提示我输入密码。
但是,我不知道如何获取生成的提示并在 python 脚本中使用它。
例如,如果我使用 subprocess.Popen() 调用命令 "echo Hello World",然后我可以使用 communicate() 方法从 运行ning 该命令获取结果标准输出.
但这就是我想要做的:
使用 Popen() 到 运行: ssh -hostname- 'echo Hello' 然后获取结果以在 python 脚本中使用。因此,如果 ssh 运行s 进入密码提示,我希望能够在 python 脚本中将该提示的输出用作字符串。最后,我希望能够退出此提示(相当于在使用 linux 终端时键入 ^C)。但是,当使用 Popen() 和 communicate() 时,它只是在实际的 linux stdout 上显示提示,而不是获取提示。
我还希望禁止在实际 linux 终端标准输出上显示此提示。
这是我一直在使用的代码(此代码在抓取普通标准输出时有效):
p = subprocess.Popen(["ssh", hostName, "echo Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sshOutput, err = p.communicate()
当然,密码提示没有存储在sshOutput中,这就是问题所在。如果我 运行 以下命令,结果将是一个包含 "Hello"
的字符串
p = subprocess.Popen(["echo", "Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result, err = p.communicate()
问题是 ssh 打印提示并从当前 tty 读取密码,而不是 stdout/stdin。参见 this question。
可能的解决方案:
我在 python 中使用 subprocces.Popen() 到 运行 linux 命令。 我正在尝试使用此命令通过 ssh 连接到另一台机器,并查看它是否提示我输入密码。
但是,我不知道如何获取生成的提示并在 python 脚本中使用它。
例如,如果我使用 subprocess.Popen() 调用命令 "echo Hello World",然后我可以使用 communicate() 方法从 运行ning 该命令获取结果标准输出.
但这就是我想要做的: 使用 Popen() 到 运行: ssh -hostname- 'echo Hello' 然后获取结果以在 python 脚本中使用。因此,如果 ssh 运行s 进入密码提示,我希望能够在 python 脚本中将该提示的输出用作字符串。最后,我希望能够退出此提示(相当于在使用 linux 终端时键入 ^C)。但是,当使用 Popen() 和 communicate() 时,它只是在实际的 linux stdout 上显示提示,而不是获取提示。
我还希望禁止在实际 linux 终端标准输出上显示此提示。
这是我一直在使用的代码(此代码在抓取普通标准输出时有效):
p = subprocess.Popen(["ssh", hostName, "echo Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sshOutput, err = p.communicate()
当然,密码提示没有存储在sshOutput中,这就是问题所在。如果我 运行 以下命令,结果将是一个包含 "Hello"
的字符串p = subprocess.Popen(["echo", "Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result, err = p.communicate()
问题是 ssh 打印提示并从当前 tty 读取密码,而不是 stdout/stdin。参见 this question。
可能的解决方案: