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:」が表示されます)。 .
しかし、これは私の知識が終わるところです。どんな助けでも大歓迎です!