Форум сайта python.su
Вечер добрый!
Функция должны пинговать указаный ip.
Помогите пожалуйста разобратся, почему вот этот код работает:
#!/usr/bin/python2.7 from subprocess import call ip = ("8.8.8.8") def pingWH(ip): call('ping -c 1 %s'%ip, shell=True) pingWH(ip)
#!/usr/bin/python2.7 from subprocess import call from Tkinter import * a=Tk() ip = ("8.8.8.8") def pingWH(ip): call('ping -c 1 '+ip, shell=True) b=Button(text='text') b.pack() b.bind("<1>",pingWH) a.mainloop()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1437, in __call__ return self.func(*args) File "./1.py", line 7, in pingWH call('ping -c 1 '+ip, shell=True) TypeError: cannot concatenate 'str' and 'instance' objects
Отредактировано fireqp0x (Янв. 10, 2013 00:14:01)
Офлайн
Во втором случае функции pingWH(ip) передается аргумент type instance, ниже Вы пытаетесь сложить его со строкой. Да, выше есть строковая переменная ip, но юзаться будет одноименная, аргумент pingWH(ip), если Вам не нужен там этот аргумент, дайте ему другое имя, и будет юзаться та ip, что строка
Офлайн
Большое спасибо!
Офлайн
Решение:
b.bind("<1>", lambda event: pingWH(ip))
Офлайн
А зачем? Лишняя функция в бинд, а строковую переменную можно напрямую юзать. Да и вдруг ему тот аргумент пондабится для чего в дальнейшем?
Офлайн
А аргумент у него никто и не забирает :)
Если понадобится
b.bind("<1>", lambda event: pingWH(ip, event))
def pingWH(ip, event):
Отредактировано 4kpt (Янв. 10, 2013 15:48:35)
Офлайн