在python程序中使用su执行命令

在python程序中使用su执行命令,python,python-2.7,ubuntu,subprocess,Python,Python 2.7,Ubuntu,Subprocess,我想制作一个python程序,它可以更改用户,为su提供密码并执行命令。不使用SUDO。最好使用子流程 例如: su testuser -c id > /tmp/test 我写了这些脚本,但它们不起作用 import subprocess su_password = ("Password\n") proc = subprocess.Popen('su testuser -c id > /tmp/test', shell=True, stdin=subproce

我想制作一个python程序,它可以更改用户,为su提供密码并执行命令。不使用SUDO。最好使用子流程

例如:

su testuser -c id > /tmp/test
我写了这些脚本,但它们不起作用

import subprocess
su_password = ("Password\n")

proc = subprocess.Popen('su testuser -c id > /tmp/test', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.stdin.write(su_password)
proc.stdin.flush()
这是一个有希望的

import pexpect
child = pexpect.spawn('su testuser')
child.expect('Password: ')
child.sendline('Password123456')
child.sendline('id > /tmp/TEST')

su从终端获取密码,而不是从标准输入。你为什么不想用sudo呢?它有一个无密码选项,可以与规定只能运行特定命令的规则相结合,并且由特定用户执行。我知道su从终端获取密码,这就是我正在尝试做的。不管怎样,当它从终点站得到它时,让它思考。不使用sudo是一项要求。您可以尝试使用“script”命令(使用-c选项)包装它。在手机上键入此命令,因此我现在无法真正测试它,但它可能会执行您需要的操作,并允许在标准输入上提供终端输入。@alani能否请您详细说明一下,我不知道如何使用“脚本”命令来包装它好吧,我之前的建议似乎不起作用,但是我在尝试了
expect
解决方案,效果很好。(检查您的确切密码提示;示例中使用了
“密码:
,但我的系统上没有空间。)