使用 pexpect 获取 'ls' 命令的输出

Using pexpect to get output of 'ls' command

我正在尝试使用 pexpect 以用户身份登录并尝试打印所有可用的 crons :

import pexpect
import os, time
passwd = "mypass"
child = pexpect.spawn('su myuser')
child.expect('Password:')
child.sendline(passwd)
child.expect('$')
child.sendline('crontab -l')
i =child.expect(['%','.*$', '$'  ])
print i                       # prints 1 here so, the shell is expected.
print child.before            # this doesn't print anything though.

此代码似乎无法正常工作并打印出空行。

  1. 无法找出此代码的问题
  2. 如果有任何更好的方法来列出其他用户的 cron 作业,给定用户名和密码

如有任何指点或建议,我们将不胜感激。

如果你可以安排配置无密码sudo访问,那么上面的内容就变成了:

import subprocess
output = subprocess.check_output('sudo -u myuser crontab -l', shell=True)

如果您需要继续使用 su,那么您可以向它传递一个命令并避免尝试解析 shell 提示:

import pexpect
passwd = "mypass"
child = pexpect.spawn('su myuser -c "crontab -l"')
child.expect('Password:')
child.sendline(passwd)
child.expect(pexpect.EOF)

print child.before