我一直在尝试使用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:”将显示,如果您在终端中运行该命令)。在
然而,我的知识就到此为止了。非常感谢任何帮助!在
您需要告诉
smbpasswd
使用stdin作为密码提示。从帮助文本:您可以使用pexpect来实现我想要的。我很确定smbpassword会像
su -c
aPTY
一样打开,并且您不能使用子进程通过PTY
进行通信。在相关问题 更多 >
编程相关推荐