1

我有 3 个文件,a.py,b.shtext.txt. 它们的内容如下:

一个.py:

#!/usr/bin/env python
import os, pexpect

class zz:
    def __init__(self):
        child = pexpect.spawn ('/home/usr/Desktop/b.sh')

        ###  VVV     LINE IN QUESTION BELOW    VVV
        child.expect(pexpect.EOF)

        child.sendline('q')
        child.interact()

z = zz()

b.sh:

less /home/usr/Desktop/text.txt
echo 'all done'
sleep 3

文本.txt:

thisistext

文件text.txtb.sh是只读的,不得更改。如何从内部退出less使用pexpecta.py

4

1 回答 1

1

假设您不想对数据做任何事情,只需从 less 读取数据的第一个屏幕,然后发出“q”。

(编辑:这需要调整给“读取”一个大小,这样它就不会等待默认大小或 eof)

#!/usr/bin/env python
import os, pexpect

class zz:
    def __init__(self):
        child = pexpect.spawn ('/home/usr/Desktop/b.sh')
        # grab the first screen from 'less'
        child.read(1)
        child.send('q')

z = zz()

这是我用于测试的代码:

~/tmp/reader$ cat a.py
#!/usr/bin/env python
import pexpect

try:
    open('status.txt', 'w')
    child = pexpect.spawn('/bin/sh "./b.sh"', timeout=10)
    child.send('q')
    child.expect(pexpect.EOF)
except Exception,e:
    print 'exception'
print open('status.txt').read()


~/tmp/reader$ cat text.txt
iamtext

~/tmp/reader$ cat b.sh
#!/bin/sh
less text.txt
echo 'all done'
sleep 3
date > status.txt
于 2013-06-25T22:39:03.397 回答