我想要做的只是让一些终端命令的输出打印到wx.TextCtrl小部件.我认为最简单的方法是创建一个自定义的stdout类,并将write函数重载为widget的.
stdout类:
class StdOut(sys.stdout):
def __init__(self,txtctrl):
sys.stdout.__init__(self)
self.txtctrl = txtctrl
def write(self,string):
self.txtctrl.write(string)
Run Code Online (Sandbox Code Playgroud)
然后我会做以下事情:
sys.stdout = StdOut(createdTxtCtrl)
subprocess.Popen('echo "Hello World!"',stdout=sys.stdout,shell=True)
Run Code Online (Sandbox Code Playgroud)
结果是以下错误:
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
Run Code Online (Sandbox Code Playgroud)
任何解决这个问题的想法都将受到赞赏.
Ale*_*lli 13
sys.stdout是不是一个class,这是一个实例(类型file).
那么,就这样做:
class StdOut(object):
def __init__(self,txtctrl):
self.txtctrl = txtctrl
def write(self,string):
self.txtctrl.write(string)
sys.stdout = StdOut(the_text_ctrl)
Run Code Online (Sandbox Code Playgroud)
无需继承file,只需制作一个像这样的简单文件对象! 鸭子打字是你的朋友......
(请注意,在Python中,与大多数其他OO语言一样,但与Javascript不同,您只能从类AKA类型继承,永远不会从类/类型的实例继承;-).
| 归档时间: |
|
| 查看次数: |
4984 次 |
| 最近记录: |