Patch Anki 2.1.50 on Windows to have valid stdout

Something in Anki is setting stdout to Null.
This is a problem because Anki itself is writing to it,
particularly when printing warnings about
the deprecated methods that we are using.

This patches Anki using the same method that
the upcoming Anki 2.1.51 is using.
This commit is contained in:
oakkitten 2022-04-20 18:30:20 +01:00
parent ca90ef95fc
commit 8a84db971a
2 changed files with 12 additions and 0 deletions

View File

@ -27,6 +27,7 @@ import inspect
import json import json
import os import os
import os.path import os.path
import platform
import re import re
import time import time
import unicodedata import unicodedata
@ -1619,6 +1620,9 @@ class AnkiConnect:
# when run inside Anki, `__name__` would be either numeric, # when run inside Anki, `__name__` would be either numeric,
# or, if installed via `link.sh`, `AnkiConnectDev` # or, if installed via `link.sh`, `AnkiConnectDev`
if __name__ != "plugin": if __name__ != "plugin":
if platform.system() == "Windows" and anki_version == (2, 1, 50):
util.patch_anki_2_1_50_having_null_stdout_on_windows()
Edit.register_with_anki() Edit.register_with_anki()
ac = AnkiConnect() ac = AnkiConnect()

View File

@ -14,6 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import os import os
import sys
import anki import anki
import anki.sync import anki.sync
@ -83,3 +84,10 @@ def setting(key):
return aqt.mw.addonManager.getConfig(__name__).get(key, DEFAULT_CONFIG[key]) return aqt.mw.addonManager.getConfig(__name__).get(key, DEFAULT_CONFIG[key])
except: except:
raise Exception('setting {} not found'.format(key)) raise Exception('setting {} not found'.format(key))
# see https://github.com/FooSoft/anki-connect/issues/308
# fixed in https://github.com/ankitects/anki/commit/0b2a226d
def patch_anki_2_1_50_having_null_stdout_on_windows():
if sys.stdout is None:
sys.stdout = open(os.devnull, "w", encoding="utf8")