Lo que intento hacer es simplemente imprimir el resultado de algunos comandos de terminal en un widget wx.TextCtrl. Pensé que la forma más fácil de lograr esto es crear una clase stdout personalizada y sobrecargar la función de escritura a la del widget.Creando una clase sys.stdout personalizada?
clase stdout:
class StdOut(sys.stdout):
def __init__(self,txtctrl):
sys.stdout.__init__(self)
self.txtctrl = txtctrl
def write(self,string):
self.txtctrl.write(string)
Y entonces me gustaría hacer algo como:
sys.stdout = StdOut(createdTxtCtrl)
subprocess.Popen('echo "Hello World!"',stdout=sys.stdout,shell=True)
El resultado es el siguiente error:
Traceback (most recent call last):
File "mainwindow.py", line 12, in <module>
from systemconsole import SystemConsole
File "systemconsole.py", line 4, in <module>
class StdOut(sys.stdout):
TypeError: Error when calling the metaclass bases
file() argument 2 must be string, not tuple
¿Alguna idea para solucionar este problema sería ser apreciado.
He intentado esto, y como resultado: Rastreo (llamada más reciente pasado): 'Hello World! "Eco' Archivo "blade_gui.py", línea 179, en OnNew subprocess.Popen (stdout = sys.stdout, shell = True) Archivo "C: \ Python26 \ lib \ subprocess.py", línea 614, en __init__ errread, errwrite) = self._get_handles (stdin, stdout, stderr) Archivo "C: \ Python26 \ lib \ subprocess.py ", línea 734, en _get_handles c2pwrite = msvcrt.get_osfhandle (stdout.fileno()) AttributeError: el objeto 'StdOut' no tiene ningún atributo 'fileno' – Duck
' subprocess' puede ejecutar programas escritos en cualquier lenguaje (¡no solo Python!) y por eso necesita un "archivo de nivel de SO real" (es decir, ., uno con un FD, también conocido como fileno) - no hay forma de pasar nada como 'stdout =' de 'subprocess.Popen' excepto un archivo real del nivel del sistema operativo (incluyendo, afortunadamente,' subprocess.PIPE', que permite que el proceso principal reciba la salida del proceso secundario; sin embargo, el almacenamiento en el proceso secundario generalmente significa que no es lo que desea, por lo que siempre sugiero usar 'pexpect' o' wexpect' en su lugar). –
necesita algo más que 'write', también necesita' flush', tal vez algunos otros dependiendo de cómo se usará. – SimplyKnownAsG