使用Python的子进程打印密码提示

时间:2016-01-06 19:01:24

标签: python subprocess

如果我使用subprocess从Python运行终端命令,如何打印密码提示?

我有一个Python脚本,要求用户通过 Kerberos 进行身份验证。我的程序基本上是这样的:

import subprocess

def kinit():
  kinit = "kinit -f"
  prompt = subprocess.check_output(kinit, shell=True)
  print prompt   ## echoes "Password for username@domain.com" AFTER pw input

if __name__=="__main__":
  kinit()
  doOtherStuff()

当从终端启动此脚本时,程序会等待密码输入(可以通过命令行输入),但它只显示“ username@domain.com 的密码”在用户输入密码后提示。

在Python脚本等待输入密码之前,您知道如何显示“ username@domain.com 的密码”吗?

2 个答案:

答案 0 :(得分:3)

这是一个互动的事情,所以你不应该打电话给check_output。这通常用于子进程,它会做一些事情然后终止(不需要键盘输入)。

您可以通过创建Popen实例,然后使用Popen.communicate与其进行交互来执行您想要的操作。但是将输入发送到进程标准输入并且正确读取标准输出的线条而不会出现死锁或缓冲并发症可能会很棘手。

还有一种更好的方法:pexpect对此非常有用。我建议在这里放弃subprocess以支持pexpect

答案 1 :(得分:-1)

原来你不能。 subprocess将不会在进程中间返回输出,并且在您输入用户输入之前,该过程将无法完成。