Python Chat?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du musst es multi Threaded machen. Wie schon in einer Antwort erwähnt.      
Sagen wir du hast ein Program.
Mit Einer Methode die den ganzen Chat anzeigt usw.    
und eine andere Methode die das mit dem
An den Chat schreiben regelt.      
        
Und du Packst auf einen Thread das „zuhören“ und auf den anderen das „schreiben“ dann laufen die parallel und beides ist aktiv. Du musst nur darauf achten das wirklich beides in einem anderen Thread ist.


User16435 
Fragesteller
 03.09.2017, 01:01

K, hab das einfach mal versucht:

import threading

def print():
print("Hi")

def input():
input = input("Input: ")
print(input)

threading.Thread(target=print).start()
threading.Thread(target=input).start()

Köntest du oder jmd anders das korrigieren sodas das funzt ?

Also das ziel ist das dauerhaft Hi geprintet wird und man gleichzeitig nen input hat...

Danke schon mal, LG Twizzy

0
Hairgott  03.09.2017, 01:04

Wait a Minute. Ich überlege schon ein bisschen aber der Code ergibt keinen Sinn.  

def input():
    input = input("Input: ") #endlos Schleife
    print(input)

Machst du hier nicht eine endlos Schleife...

0
Hairgott  03.09.2017, 01:05

Ahh ok. Ne deine Methoden Benennung hat mich verwirrt.

0
User16435 
Fragesteller
 03.09.2017, 01:09
@Hairgott

hats recht, da ist nen fehler drin. So ist richtig:

import threading

def print():
print("Hi")

def input_m():
input_i = input("Input: ")
print(input_i)

threading.Thread(target=print).start()
threading.Thread(target=input_m).start()

Ich bekomm jz nur noch eine fehlermeldung:

C:\Users\\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users//PycharmProjects/PyChatStreamPrototype/test.py
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Users\\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:/Users//PycharmProjects/PyChatStreamPrototype/test.py", line 4, in print
print("Hi")
TypeError: print() takes 0 positional arguments but 1 was given

Input: hi
Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Users\\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Users\\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:/Users//PycharmProjects/PyChatStreamPrototype/test.py", line 8, in input_m
print(input_i)
TypeError: print() takes 0 positional arguments but 1 was given
0
Hairgott  03.09.2017, 01:07

Wenn es dauerhaft hi Printen soll musst du einfach ne Schleife um das print „hi“ machen.  
Nutzt du Pyhton 2.7 oder 3?

0
User16435 
Fragesteller
 03.09.2017, 01:13
@Hairgott

So würds jede sek. Hi ausgeben:

import time

while True:
print("Hi")
time.sleep(1)

Nur das mit dem Input ist mir halt noch nen rätsel...

0
Hairgott  03.09.2017, 01:08

Aber wenn du gleichzeitig nen Input haben willst, ist das wieder was anderes.    
Es läuft dann zwar alles in einer console aber naja... das ist totaler blödsinn.

0
User16435 
Fragesteller
 03.09.2017, 01:10
@Hairgott

Ich benutze py 3. Das mit der schleife ist mir klar, nur bekomme ich halt jetzt schon einen Fehler

0
Hairgott  03.09.2017, 01:18

def print_text(variable):
    print("Hi")

def input_m():
    input_i = input("Input: ")
    print(input_i)

threading.Thread(target=print_text).start()
threading.Thread(target=input_m).start()

Es gibt in Python schon eine Methode die print heißt. Du überschreibst diese und somit kannst du kein Object mitgeben.      

0
User16435 
Fragesteller
 03.09.2017, 01:22
@Hairgott

Was soll das argument "variable" ?

So gibt das nen error weil das argument im thread nicht behandelt wird...

import time
from threading import Thread

def P():
while True:
print("Hi")
time.sleep(1)

def I():
while True:
i = input("Schreib ma wat: ")
print(i)

Thread(target=P()).start()
Thread(target=I()).start()

So weit bin ich grad mal gekommen, kein error aber der input geht net

0
User16435 
Fragesteller
 03.09.2017, 01:25
@Hairgott

Wenn ich das argument variable entferne wird einaml Hi ausgegeben, dann hab ich mein input, aber hi wird halt nur einaml ausgegebn. Wenn ich nen while true drumsetze wird hi gespamt, aber ich habe wieder kein input...

0
Hairgott  03.09.2017, 01:18

Das import fehlt noch

0
Hairgott  03.09.2017, 01:28

Jap. Weil Console nur ein task machen kann.    
Du müsstest ein neues Fenster öffnen und die zwei Programme kommunizieren lassen.

0
User16435 
Fragesteller
 03.09.2017, 01:31
@Hairgott

K danke.

Sorry, bin wie gesagt neu bei py, wie öffne ich nen fenster üebrn code ?

und ist es möglich die "aneinaderzuheften" ?

also wie bei Teamviewer, sodass das eine Fenster dirket neben dem anderen ist und wenn man eins bewegt das andere mitzieht ? sodass es en bischen übersichtlicher ist ?

0
Hairgott  03.09.2017, 01:37

Alta, ich hab nur bisschen Python 2.7 gemacht xD ich kann dir nicht weiter helfen.      
      

0
User16435 
Fragesteller
 03.09.2017, 01:40
@Hairgott

K Dann mal Danke für die gefühlten 100 kommis :D

Hat mich dem Ziel einiges weiter gebracht da ich meine Zeit jz nicht darauf verschwende etwas zu machen was nicht geht :D

LG Twizzy

0

Du kannst entweder mit mehreren Threads arbeiten oder besser, du baust ein eventbasiertes System auf. Ein Schritt für Schritt erklärtes Tutorial findest du hier: http://etutorials.org/Programming/Python+tutorial/Part+IV+Network+and+Web+Programming/Chapter+19.+Sockets+and+Server-Side+Network+Protocol+Modules/19.3+Event-Driven+Socket+Programs/ 


User16435 
Fragesteller
 03.09.2017, 01:38

K danke schon mal aber bevor ich mich da durch kämpfe:

Wie ich ja gerade gelernt habe läst die konsole nur einen task auf einmal zu, ist das bei deiner anleitung was anderes ?

Sorry falls das ne dumme Frage ist, bin wie gesagt neu in Py

0
regex9  03.09.2017, 01:48
@User16435

Ein eventbasiertes System arbeitet mit nur einem Thread.

0

Ok nach allem noch mal kurz meine Gedanken für alle die auch einen Chat programmieren.

Also, Der Client besteht aus 2 Py FIles die unabhänig voneiander funzen.

Ein Fenster ist Der Chatverlauf, dieser wird vom Server gesendet.

Das andere Fenster ist der Input, dieser wird an den Server gesendet.

Hier mal ein gutes (Englisches) Tut, läst sich denk ich recht einfach zu dem beschriebenen umformen, habs (bis jetzt) noch nicht ausprobiert.

https://youtube.com/watch?v=PkfwX6RjRaI

LG Twizzy


User16435 
Fragesteller
 03.09.2017, 02:00

Ach ja, das Tut ist in Py 2.7, Muss man also umschreiben, ist aber keine arbeit, einfach print "" durch print(""), input_raw() oder so zu input() und statt den mist als string zu senden zu byte convertieren

(alias + ": " + message).encode("utf-8")
str(data.decode("utf-8")

So müste es gehen

0

Hallo, 

Multithreading / Parallelisierung ist das, wonach du suchst.


User16435 
Fragesteller
 03.09.2017, 00:46

Das hab ich mir gedacht, trotzdem pausiert immer alles wenn ich nen input habe bis ich enter drücke oder ?

0
User16435 
Fragesteller
 03.09.2017, 00:53
@minearth

Köntest du mir ein code senden der ständig Hallo printet und gleichzeitig ein input offen hält, wenn man den input dann bestätigt wird der auch geprintet ? Das könte ich denke ich dann denke ich umbauen.

0