1

Python の subprocess モジュールを使用してプログラム (smbpasswd) と通信しようとしましたが、あまり成功しませんでした。問題なく別のプログラム (grep など) と通信できるので、問題は smbpasswd に固有のものです。問題を説明するために、次のコードが機能します。

>>> p = Popen(["grep", "n"], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
>>> stdout = p.communicate(input='one\ntwo\n')[0]
>>> print(stdout)
one

ただし、次の場合はそうではありません。

>>> p = Popen(["smbpasswd", "-r", server, "-U", user], stdout=PIPE, stdin=PIPE, stderr=PIPE)
>>> stdout = p.communicate(input='old_password')[0]
>>> print(stdout)

違いは、grep は最初の「grep f」を呼び出した後、ユーザー入力を待機するのに対し、smbpasswd はユーザーに古いパスワードの入力を求めるプロンプトを出すことです (ターミナルでコマンドを実行すると、「Old SMB password:」が表示されます)。 .

しかし、これは私の知識が終わるところです。どんな助けでも大歓迎です!

4

2 に答える 2

1

私が望むものを達成するためにpexpectを使用できます。smbpassword が のようsu -cに開き、PTYサブプロセスを使用してPTY.

于 2012-05-11T16:16:43.103 に答える
0

smbpasswdパスワード プロンプトに stdin を使用するように指示する必要があります。ヘルプテキストから:

When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -s                   use stdin for password prompt
于 2012-05-11T16:50:19.400 に答える