当我运行此代码时,我收到错误消息: 文件“Start.py”,第22行,in c.lo() TypeError:lo()不带参数(给定1个)
我不知道为什么我得到这个错误有人可以解释一下吗? 我知道它说我在调用该函数时提出了一个参数,但我不明白为什么会这样? 如果有人能够对这个问题有所了解,那就太棒了。
import subprocess as sp
import Tkinter as Tk
from Tkinter import *
root = Tk()
text=Text(root)
class Console:
def Start():
proc = sp.Popen(["java", "-Xmx1536M", "-Xms1536M", "-jar",".jar"],stdin=sp.PIPE,stdout=sp.PIPE,)
def lo():
while True:
line=proc.stdout.readline()
text.insert(INSERT,line)
text.pack()
if(line=="Read Time Out"):
proc.stdin.write('stop')
if(line=="Unloading Dimension"):
text.insert(INSERT,"Ready for command")
text.pack()
c=Console()
c.Start()
c.lo()
root.mainloop()
答案 0 :(得分:2)
方法总是将实例作为第一个参数 您的方法定义应如下所示:
def some_method(self):
# do_stuff
答案 1 :(得分:1)
简而言之,这是因为lo()
是类Console
的方法,它始终作为第一个参数传递实例。因此lo()
必须定义一个参数(通常称为self
)来保存该参数:
class Console:
def start(self): # functions and methods should have lowercase names
self.proc = sp.Popen(...)
def lo(self):
line = self.proc.stdout.readline()
...
我很惊讶你的Start()
电话有效;它有同样的问题。