Autojump: Absturz unter Windows aufgrund falscher Backslash-Behandlung in autojump_match.py

Erstellt am 1. Aug. 2016  ·  7Kommentare  ·  Quelle: wting/autojump

Das Ausführen eines normalen Autojump-Befehls in Windows führt dazu:

Traceback (most recent call last):
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\\autojump", line 320, in <module>
    sys.exit(main(parse_arguments()))
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\\autojump", line 314, in main
    ['.'])))
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\autojump_utils.py", line 42, in first
    return it.next()
  File "C:\Program Files (x86)\CowShell\Vendor\AutoJump\bin\autojump_match.py", line 86, in <lambda>
    flags=regex_flags,
  File "F:\Programs\Python\lib\re.py", line 146, in search
    return _compile(pattern, flags).search(string)
  File "F:\Programs\Python\lib\re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression
ECHO is off.

Die hervorgehobene Änderung hier: https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
zu Fehlfunktionen in Windows-Systemen führen.

Die vorgeschlagene Lösung besteht im Wesentlichen darin, die Zeilen 78-80 in autojump_match.py ​​zu ändern:

    sep = '\\\\' if os.sep == '\\' else os.sep
    regex_no_sep = '[^' + sep + ']*'
    regex_no_sep_end = regex_no_sep + '$'
    regex_one_sep = regex_no_sep + sep + regex_no_sep

(Bedingtes Festlegen des in der Regex-Konstruktion verwendeten Trennzeichenwerts)

os-windows priority-high

Hilfreichster Kommentar

Windows 10 professional, ich habe dieses Problem heute kennengelernt ... und der vorgeschlagene Patch funktioniert wie ein Zauber! Vielen Dank. Ich frage mich nur, warum der Patch nicht in den Master eingebunden wird, während vier Jahre vergangen sind?

Alle 7 Kommentare

Hey danke für den ausführlichen Fehlerbericht!

Leider habe ich keinen Zugriff auf einen Windows-Rechner. Können Sie diese Windows-Tests so aktualisieren, dass sie den Fehler reproduzieren, den Sie haben? Auf diese Weise können wir zukünftige Regressionsfehler verhindern.

Probieren Sie einfach Autojump unter Win10 aus und klicken Sie darauf. Der vorgeschlagene Patch scheint bei mir zu funktionieren.

@wting Wenn die Tests nicht wirklich unter Windows ausgeführt werden, werden die match_consecutive Tests dann nicht die falschen os.sep ? Die Tests werden nicht wirklich fehlschlagen, es sei denn, os.sep ist ein umgekehrter Schrägstrich.

Sie können es für Tests wie diese verspotten:

In [1]: import os, mock

In [2]: os.sep
Out[2]: '/'

In [3]: with mock.patch.object(os, 'sep', '\\'):
   ...:     print(os.sep)
   ...:     
\

Ich hatte das gleiche Problem und die vorgeschlagene Lösung hat das Problem gelöst. Ich vermute, dass eine alternative Lösung darin besteht, die Tests auf einer Windows-CI-Plattform wie Appveyor auszuführen.

gewinnen 10 64 , das gleiche Problem. Änderung autojump_match.py ​​hat funktioniert. Danke schön.

Windows 10 professional, ich habe dieses Problem heute kennengelernt ... und der vorgeschlagene Patch funktioniert wie ein Zauber! Vielen Dank. Ich frage mich nur, warum der Patch nicht in den Master eingebunden wird, während vier Jahre vergangen sind?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

loveencounterflow picture loveencounterflow  ·  6Kommentare

srid picture srid  ·  14Kommentare

hcsaustrup picture hcsaustrup  ·  9Kommentare

nunoh picture nunoh  ·  20Kommentare

pgrm picture pgrm  ·  4Kommentare