Вот хак, который я сейчас использую на тот случай, если другим нужно обойти это в краткосрочной перспективе.Я отправлю ответ, если у меня возникнут проблемы с ним;пока только минимально проверено.В основном, если вы работаете в Windows, я просто записываю команду в файл .bat
, затем запускаю файл .bat
(как однострочную команду).
import invoke
import platform
from pathlib import Path
from tempfile import TemporaryDirectory
def _fixed_run(ctx, cmd: str, *args, **kwargs):
if platform.system() != "Windows":
return ctx._old_run(cmd, *args, **kwargs)
with TemporaryDirectory() as tmp_dir:
tmp_file = Path(tmp_dir) / "tmp.bat"
tmp_file.write_text("@echo off\r\n" + cmd)
return ctx._old_run(str(tmp_file), *args, **kwargs)
invoke.Context._old_run = invoke.Context.run
invoke.Context.run = _fixed_run
Чтобы использовать этолегко, сохраните его в файл (например, fix_invoke.py
, а затем просто сделайте import fix_invoke
всякий раз, когда вам нужно это исправление).
Я был бы рад услышать о реальном решении, хотя, если у кого-то есть такое решение!