Autojump: Crash pada Windows karena penanganan backslash yang tidak tepat di autojump_match.py

Dibuat pada 1 Agu 2016  ·  7Komentar  ·  Sumber: wting/autojump

Menjalankan perintah autojump normal di Windows mengarah ke ini:

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.

Perubahan yang disorot di sini: https://github.com/wting/autojump/commit/7c7865ea7ecfd937284f774fb0818c5cc10c340a#diff -4b97c2fd2ae952c567c1646bc80e5d43L78
menyebabkan disfungsi pada sistem Windows.

Solusi yang diusulkan pada dasarnya mengubah baris 78-80 di autojump_match.py ​​menjadi:

    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

(Secara kondisional mengatur nilai pemisah yang digunakan dalam konstruksi regex)

os-windows priority-high

Komentar yang paling membantu

Window 10 profesional, saya menemui masalah ini hari ini .... dan tambalan yang disarankan berfungsi seperti pesona! Terimakasih banyak. Saya hanya bertanya-tanya mengapa tambalan tidak digabung menjadi master sementara empat tahun telah berlalu?

Semua 7 komentar

Hei, terima kasih atas laporan bug terperinci!

Sayangnya saya tidak memiliki akses ke mesin Windows. Bisakah Anda memperbarui tes Windows ini sehingga mereka mereproduksi kesalahan yang Anda miliki? Dengan begitu kami dapat mencegah bug regresi di masa mendatang.

Baru saja mencoba autojump di Win10 dan tekan ini. Tambalan yang diusulkan tampaknya berfungsi untuk saya.

@wting Jika tes tidak benar-benar dijalankan di Windows, bukankah tes match_consecutive akan mengambil os.sep ? Tes tidak akan benar-benar gagal kecuali os.sep adalah garis miring terbalik.

Anda dapat mengejeknya untuk tes seperti:

In [1]: import os, mock

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

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

Saya memiliki masalah yang sama dan perbaikan yang disarankan memecahkan masalah. Saya kira solusi alternatif adalah menjalankan tes pada platform windows CI seperti appveyor.

menang 10 64 , masalah yang sama. ubah autojump_match.py ​​berhasil. Terima kasih.

Window 10 profesional, saya menemui masalah ini hari ini .... dan tambalan yang disarankan berfungsi seperti pesona! Terimakasih banyak. Saya hanya bertanya-tanya mengapa tambalan tidak digabung menjadi master sementara empat tahun telah berlalu?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat