Embed vte. How to do the same as this PyGtk app with wxPython?

818 Views Asked by At

It's my first post. I read a lot of subjects per day on Stackoverflow, and i appreciate to find there some help. And today it's my turn to ask a question because i didn't find solution to my need.

I want to have a terminal in the app i'm writing; i(ve read a lot about a lots (subprocess, thread, pty, etc, etc), but i didn't find a simple solution as this one written with pygtk and vte. Here is the code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require('2.0')
import gtk, vte

window = gtk.Window()
window.resize(600,400)
window.show()

term  = vte.Terminal()
pid   = term.fork_command('bash')
term.set_emulation('xterm')
term.show()

window.add(term)
window.show_all()
window.connect("destroy", lambda w: gtk.main_quit())
gtk.main()

Do you know a way to do that with wxPython?

Thanks a lot for your help, many thanks!! :)

Edit0:

I have to precise that:

  • i'm talking about a bash shell (as in the code above), not a python shell
  • i write it for linux

Edit1:

Thanks for your answers! :)

Joran, i've read already this question, and i've tried all the code proposed. Although it's interesting, that's not the way i want to do it as you can see in my question. It seems to be very difficult to write an app that recreate a terminal emulator.

That's why i'm searching for a solution like the code i proposed.

pythonm, i don't see the relation between your idea and my question...

Thanks for your help!

Edit2

Please look at this short code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import pty


shell = os.environ['SHELL']
script = open('typescript', 'w')

def read(fd):
    data = os.read(fd, 1024)
    script.write(data)
    return data

pty.spawn(shell, read)

Any idea to "put" this in a widget with wxpython?

Edit3

Look that too:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pexpect


c = pexpect.spawn ('bash -i')
c.interact()
c.kill(1) 

So simple and so easy to do...

Tell me if it's impossible to embed that in a wx widget.

1

There are 1 best solutions below

1
On

I've seen this question come up a couple times in the last month or two. The answer is no, wxPython doesn't have this capability. You would have to use subprocess to launch something and communicate with it.