使用 Python 的子进程打印密码提示
Print password prompt using Python's subprocess
如果我 运行 来自 Python 的终端命令使用 subprocess
,我该如何打印密码提示?
我有一个 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()
当从终端启动此脚本时,程序会等待密码输入(可以通过命令行输入),但它只会在用户输入密码后显示 "Password for username@domain.com" 提示。
你知道我如何在 Python 脚本等待他们输入密码之前显示 "Password for username@domain.com" 吗?
这是一个交互式的东西,所以你不应该调用 check_output
。这通常用于将执行一些操作然后终止的子进程(无需键盘输入)。
您可以创建一个 Popen
实例,然后使用 Popen.communicate
与其进行交互,从而实现您想要的效果。但是将输入发送到进程标准输入并从它的标准输出中正确读取行而不会出现死锁或缓冲并发症可能会很棘手。
还有一个更好的方法:pexpect
非常适合这个。我建议在这里放弃 subprocess
,转而使用 pexpect
。
原来你做不到。 subprocess
不会 return 在进程中间输出,并且在您输入用户输入之前进程不会完成。
如果我 运行 来自 Python 的终端命令使用 subprocess
,我该如何打印密码提示?
我有一个 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()
当从终端启动此脚本时,程序会等待密码输入(可以通过命令行输入),但它只会在用户输入密码后显示 "Password for username@domain.com" 提示。
你知道我如何在 Python 脚本等待他们输入密码之前显示 "Password for username@domain.com" 吗?
这是一个交互式的东西,所以你不应该调用 check_output
。这通常用于将执行一些操作然后终止的子进程(无需键盘输入)。
您可以创建一个 Popen
实例,然后使用 Popen.communicate
与其进行交互,从而实现您想要的效果。但是将输入发送到进程标准输入并从它的标准输出中正确读取行而不会出现死锁或缓冲并发症可能会很棘手。
还有一个更好的方法:pexpect
非常适合这个。我建议在这里放弃 subprocess
,转而使用 pexpect
。
原来你做不到。 subprocess
不会 return 在进程中间输出,并且在您输入用户输入之前进程不会完成。