Page 1 of 1

python-chess stockfish

Posted: Fri May 31, 2019 1:39 pm
by Champ8888
Ich habe ein schachprogramm geschrieben das mit hilfe von Stockfish eine KI erstellt.
Auf Windows funktioniert es aber auf Linux bekomme ich immer eine Fehlermeldung

Code:

Code: Select all

import chess
import chess.engine




def zug(brett):
    engine = chess.engine.SimpleEngine.popen_uci("./stockfish-10-linux/Linux/stockfish_10_x64")
    global result
    global a
    board = brett

    result = engine.play(board, chess.engine.Limit(time=0.100))
    a = result.move

    engine.quit()

    return a

board = chess.Board()
zug(board)

Fehlermeldung:
Traceback (most recent call last):
File "/home/pi/Python-Programme/Zauberschach_fertig/schach_ki.py", line 21, in <module>
zug(board)
File "/home/pi/Python-Programme/Zauberschach_fertig/schach_ki.py", line 8, in zug
engine = chess.engine.SimpleEngine.popen_uci("./stockfish-10-linux/Linux/stockfish_10_x64")
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 2302, in popen_uci
return cls.popen(UciProtocol, command, timeout=timeout, debug=debug, setpgrp=setpgrp, **popen_args)
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 2294, in popen
return run_in_background(background, debug=debug)
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 193, in run_in_background
return future.result()
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 405, in result
return self.__get_result()
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 357, in __get_result
raise self._exception
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 172, in background
loop.run_until_complete(coroutine(future))
File "/usr/lib/python3.5/asyncio/base_events.py", line 466, in run_until_complete
return future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step
result = coro.send(None)
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 2283, in background
transport, protocol = yield from Protocol.popen(command, setpgrp=setpgrp, **popen_args)
File "/home/pi/.local/lib/python3.5/site-packages/chess/engine.py", line 803, in popen
return (yield from loop.subprocess_exec(cls, *command, **popen_args))
File "/usr/lib/python3.5/asyncio/base_events.py", line 1189, in subprocess_exec
bufsize, **kwargs)
File "/usr/lib/python3.5/asyncio/unix_events.py", line 191, in _make_subprocess_transport
**kwargs)
File "/usr/lib/python3.5/asyncio/base_subprocess.py", line 39, in __init__
stderr=stderr, bufsize=bufsize, **kwargs)
File "/usr/lib/python3.5/asyncio/unix_events.py", line 695, in _start
universal_newlines=False, bufsize=bufsize, **kwargs)
File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error
Kann mir bitte jemand helfen?

Re: python-chess stockfish

Posted: Mon Jun 03, 2019 9:56 am
by holgerble
Falsche Bibliothek ???

x64 ???

stretch ist 32 Bit Betriebssystem!!

Re: python-chess stockfish

Posted: Mon Jun 03, 2019 5:10 pm
by Champ8888
Ich habe allerdings keine 32 Bit Version für Linux gefunden.
Außerdem bin ich ziemlich verwirrt da es bei Windows eine exe Datei ist und bei Linux eine "Gemeinsame Bibliothek". Was auch immer das ist.

Re: python-chess stockfish

Posted: Mon Jun 03, 2019 8:18 pm
by mline
Champ8888 wrote:
Mon Jun 03, 2019 5:10 pm
Ich habe allerdings keine 32 Bit Version für Linux gefunden.
Weil es keine gibt. Wenn du das Binary für raspberry pi brauchst (arm) dann müsstest du dir die source laden und selbst kompilieren. Oder falls es das ist was du benötigst, installiere dir das Paket aus der Repository für raspbian

Code: Select all

sudo apt-get install stockfish
Champ8888 wrote:
Mon Jun 03, 2019 5:10 pm
Außerdem bin ich ziemlich verwirrt da es bei Windows eine exe Datei ist und bei Linux eine "Gemeinsame Bibliothek". Was auch immer das ist.
Es wird sich bei der von der Seite herunterladbaren Datei auch um eine ausführbare Datei handeln. Allerdings läuft die nur auf der Architektur x86_64 (oder kurz x64) und nicht auf arm. Bibliotheken haben bei Linux die Extension .so

Re: python-chess stockfish

Posted: Tue Jun 04, 2019 3:44 pm
by Champ8888
Ich habe jetzt mit dem Befehl stockfish installiert.
Aber was muss ich in die Zeile: engine = chess.engine.SimpleEngine.popen_uci("") schreiben?
B.z.w. muss ich dann einen anderen Befehl verwenden?

Re: python-chess stockfish

Posted: Tue Jun 04, 2019 4:26 pm
by mline
Ich vermute mal /usr/bin/stockfish

Re: python-chess stockfish

Posted: Tue Jun 04, 2019 4:41 pm
by Champ8888
Jetzt funktioniert es endlich. :D
Es war allerdings unter Games gespeichert. Warum auch immer.

Vielen Dank für die Hilfe.