1

基本的に、私はバックグラウンドでデーモンを起動したかったのですが、それでもコンソールのユーザーにパスワードの入力を求めます。これは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
4

2 に答える 2

3

pexpectには、子プロセスへの接続を閉じるメソッドclose(self、force = True)があります。

ドキュメントによると、force = Trueの場合、子プロセスは終了します。

child.close(force=False)

切断する必要がありますが、アプリケーションは実行したままにします。

于 2012-09-28T23:03:30.920 に答える
1

Danyは、「os.fork()を使用して、デーモンモジュールを実行することを検討しましたか?」と提案しました。

あなたの答えは「はい、しかし私はデーモンにパスワードを渡す方法を知りませんでした。パスワードを安全に保つ必要があります。つまり、hddに保存せず、画面に表示しません。」

ただし、パスワードをデーモンに渡すために何もする必要はありません。フォーク後もアクセス可能です。例えば:

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

したがって、親のパスワードを読み取り、デーモンをフォークします。すでにパスワードが設定されているため、ttyは必要ありません。問題が解決しました。

于 2012-09-28T23:33:06.843 に答える