diff --git a/thefuck/rules/pyenv_no_such_command.py b/thefuck/rules/pyenv_no_such_command.py index 440e267b..3acc857b 100644 --- a/thefuck/rules/pyenv_no_such_command.py +++ b/thefuck/rules/pyenv_no_such_command.py @@ -1,6 +1,7 @@ import re from thefuck.utils import cache, for_app, replace_argument, replace_command, which -from thefuck.specific.devenv import env_available, COMMON_TYPOS, get_commands +from thefuck.specific.devenv import env_available, COMMON_TYPOS +from subprocess import PIPE, Popen enabled_by_default = env_available @@ -10,6 +11,11 @@ def match(command): return 'pyenv: no such command' in command.output +def get_commands(): + proc = Popen(['pyenv', 'commands'], stdout=PIPE) + return [line.decode('utf-8').strip() for line in proc.stdout.readlines()] + + if which('pyenv'): get_commands = cache(which('pyenv'))(get_commands) @@ -19,5 +25,5 @@ def get_new_command(command): broken = re.findall(r"pyenv: no such command `([^']*)'", command.output)[0] matched = [replace_argument(command.script, broken, common_typo) for common_typo in COMMON_TYPOS.get(broken, [])] - matched.extend(replace_command(command, broken, get_commands(command.script_parts[0]))) + matched.extend(replace_command(command, broken, get_commands())) return matched