2013-11-23 3 views
0

Когда я запускаю этот код, я получаю сообщение об ошибке: Файл «Start.py», строка 22, в c.lo() ТипError: lo() не принимает аргументов (1 данный)Python: Функция не принимает аргументов

Я не знаю точно, почему я получаю эту ошибку, может кто-нибудь объяснить? Я знаю его высказывание, что я приводил аргумент при вызове этой функции, но я не понимаю, почему это так? Если кто-то может пролить свет на этот вопрос, это было бы здорово.

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() 

ответ

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() вызов работал; у него такая же проблема.

2

Методы всегда получают экземпляр как первый аргумент.
Ваши определения метода должен выглядеть следующим образом:

def some_method(self): 
    # do_stuff 
Смежные вопросы