使用stdin/stdou通过Python子进程与smbpasswd通信

2024-09-30 04:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用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

但是,以下内容不包括:

^{pr2}$

区别在于grep在调用初始“grep f”后等待用户输入,而smbpasswd则提示用户在查找输入之前输入他们的旧密码(“old SMB password:”将显示,如果您在终端中运行该命令)。在

然而,我的知识就到此为止了。非常感谢任何帮助!在


Tags: 模块代码用户程序stderrstdinstdoutone
2条回答

您需要告诉smbpasswd使用stdin作为密码提示。从帮助文本:

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

options:
  -s                   use stdin for password prompt

您可以使用pexpect来实现我想要的。我很确定smbpassword会像su -caPTY一样打开,并且您不能使用子进程通过PTY进行通信。在

相关问题 更多 >

    热门问题