使用pexpect获得' ls'命令

时间:2016-05-11 15:45:58

标签: python python-2.7 subprocess crontab pexpect

我正在尝试使用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作业,请给出用户名和密码
  3. 任何指针或建议都会非常感激。

1 个答案:

答案 0 :(得分:1)

如果您可以安排配置无密码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