Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34.3k
Open
Description
Bug report
Bug description:
#132036 included an algorithmic change toshlex.quote that made it slower when the input has to be quoted. This is because the regular expression search was able to short-circuit at the first unsafe character.
However, theisascii check is worthwhile
Cc@picnixz
importreimportshleximporttimeit# From 3.13_find_unsafe=re.compile(r'[^\w@%+=:,./-]',re.ASCII).searchdefold_quote(s):"""Return a shell-escaped version of the string *s*."""ifnots:return"''"# BEST: if s.isascii() and _find_unsafe(s) is None:if_find_unsafe(s)isNone:returns# use single quotes, and put single quotes into double quotes# the string $'b is then quoted as '$'"'"'b'return"'"+s.replace("'","'\"'\"'")+"'"g= {'old_quote':old_quote,'new_quote':shlex.quote}print('with spaces')print(' old',timeit.timeit("old_quote('the quick brown fox jumps over the lazy dog')",globals=g,number=1000000))print(' new',timeit.timeit("new_quote('the quick brown fox jumps over the lazy dog')",globals=g,number=1000000))print('without spaces')print(' old',timeit.timeit("old_quote('thequickbrownfoxjumpsoverthelazydog')",globals=g,number=1000000))print(' new',timeit.timeit("new_quote('thequickbrownfoxjumpsoverthelazydog')",globals=g,number=1000000))print('non-ASCII')print(' old',timeit.timeit("old_quote('mötley')",globals=g,number=1000000))print(' new',timeit.timeit("new_quote('mötley')",globals=g,number=1000000))print('short')print(' old',timeit.timeit("old_quote('a')",globals=g,number=1000000))print(' new',timeit.timeit("new_quote('a')",globals=g,number=1000000))
sample output:
with spaces old 0.4148377259989502 new 0.5036935329990229without spaces old 0.3872929839999415 new 0.3540855330065824ascii old 0.4636239370011026 new 0.20726546400692314short old 0.1217202929983614 new 0.2977778149943333CPython versions tested on:
3.14
Operating systems tested on:
Linux