在后台启动python程序,可以提示用户输入密码

时间:2012-09-28 22:45:57

标签: python daemon background-process

基本上我想在后台启动一个守护进程,它仍然会在控制台中提示用户输入密码。我用pexpect创建了这个,但是当这个程序结束时它会杀死守护进程,因为它是一个子进程。因此,显然pexpect不适用于此。有没有人知道这样做的方法?

#!/usr/bin/env python
import pexpect
import getpass
child = pexpect.spawn('python daemon.py &')
child.expect_exact('Password:')

passwd = getpass.getpass()

child.sendline(passwd)

index = child.expect_exact('Started Successfully')
print index

2 个答案:

答案 0 :(得分:3)

pexpect有一个方法close(self, force=True),它关闭了与子进程的连接。

根据文档,如果force = True则终止子进程

child.close(force=False)

应该断开连接,但让应用程序继续运行。

答案 1 :(得分:1)

Dany建议,“你考虑过使用os.fork()然后运行守护进程模块吗?”

您的回答是“是的,但我不知道如何将密码传递给守护进程。必须保持密码安全,即不要存储在硬盘上而不是在屏幕上显示。”

但您无需执行任何操作即可将密码传递给守护程序。在fork之后,它仍然可以访问。例如:

passwd = getpass.getpass()
pid = os.fork()
if pid:
  print 'Parent thinks passwd is', passwd
else:
  print 'Child thinks passwd is', passwd

所以,在父节点中读取密码,然后分叉守护进程;它已经有密码,所以它不需要任何东西。问题解决了。