首页 > 解决方案 > Pexpect 脚本为输出提供“无”

问题描述

以下脚本None在服务器上运行时打印

#!/usr/bin/env python
import pexpect
import sys
dcommand = ('ls')
child = pexpect.spawn(dcommand)
output = child.before
print output 

不知道为什么会这样 - 这是我手动运行 ls 时发生的比较 - 那里肯定有东西!

[root@dub-svrfarm27 ~]# python script.py
None
[root@dub-svrfarm27 ~]# ls
anaconda-ks.cfg  auto_ovirt_st_setup.py  install_time  kickstart-post.log  original-ks.cfg  script.py 

有任何想法吗?我敢肯定这很愚蠢,但什么...

标签: pythonpexpect

解决方案


您需要期待prompt然后从缓冲区中读取每个操作的数据,例如,

(pilenv) bash-5.0$ cat ll.py 
import pexpect
import sys
dcommand = 'ls'
child = pexpect.spawn(dcommand)
child.expect(r'.*$') # my prompt ends with $, if yours ends with something else, then use that
print(child.readline()) 

(pilenv) bash-5.0$ python ll.py 
b'agust.py\t     IMG-20191213-WA0000.jpg  lib    l.py\r\n'
(pilenv) bash-5.0$ 

另请参阅代码pexpect以了解我为个人所做的合理使用方式:)


推荐阅读