Python PyDev, Предотвращает возврат каретки из input()
-
29-09-2019 - |
Вопрос
ПРАВКА-4
Я запустил свой sitecustomize.py для выполнения, но он выдает ошибку. Вот код за это.
Ошибка заключается в:
Error in sitecustomize; set PYTHONVERBOSE for traceback:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Я еще не очень хорошо разбираюсь в Python, поэтому решил закомментировать только те строки, которые, по моему мнению, мне не понадобятся.Проблем с кодировкой не обнаружено, поэтому я просто закомментировал строки 23-104, но это тоже не помогло.
ПРАВКА-3
У меня также была установлена версия 2.5.1, поэтому я скомпилировал с ней другой скрипт.
print 'This will test carriage returns on Windows with PyDev on Eclipse Helios'
print'Type something:',
test = raw_input()
print('You entered the following ascii values:')
for c in test:
print(str(ord(c)))
Это прошло нормально и привело к
This will test carriage returns on Windows with PyDev on Eclipse Helios
Type something: g
You entered the following ascii values:
103
Так это, возможно, только для Python3?Я знаю, что это не интерпретатор, потому что я могу запустить его в командной строке просто отлично.Что это дает?
ПРАВКА-2
Только что протестирован с Helios, все та же проблема.Вот моя тестовая программа:
print('This will test carriage returns on Windows with PyDev on Eclipse Helios.')
print('Type something:', end='')
test = input()
print('You entered the following ascii values:')
for c in test:
print(str(ord(c)))
И вот результат, когда я набираю "g" и нажимаю Enter:
This will test carriage returns on Windows with PyDev on Eclipse Helios.
Type something:g
You entered the following ascii values:
103
13
По большому счету, это небольшая проблема.Я мог бы использовать input().rstrip() и это работает.Но обходной путь даже не должен быть необходимым.Я печатаю в два раза больше, чем мне нужно, на языке, который я использую, потому что он лаконичный и красивый.
ПРАВКА-1
Это Eclipse 3.5.К сожалению, это последняя версия, которая была одобрена для использования на работе.Я собираюсь попробовать 3.6 дома, чтобы посмотреть, отличается ли это как-то, но я все равно не смог бы им пользоваться.
(первоначальный вопрос)
Я изучал некоторые основы Python и решил перейти на PyDev, поскольку он поддерживает Python 3, а также обладает всеми приятными функциями фрагмента кода и автозаполнения.
Тем не менее, я столкнулся с этой проклятой проблемой возврата каретки в Windows.
Мои поиски всегда возвращают меня к этому списку рассылки:http://www.mail-archive.com/python-list@python.org/msg269758.html
Итак, я взял файл sitecustomize.py, попытался включить его в путь Python для моего настроенного интерпретатора, а также для моего проекта, но безрезультатно.
Кому-нибудь еще удалось справиться с этим?Или, может быть, знает, как заставить new sitecustomize.py фактически выполняться, чтобы он мог переопределять input() и raw_input()?
Я знаю, что всегда мог бы создать короткий модуль со своей собственной функцией замены input(), но мне бы действительно хотелось устранить проблему в корне.Aptana признает эту проблему ( http://pydev.org/faq.html#why_raw_input_input_does_not_work_correctly ), но не предлагает никакого решения.Заранее благодарю за вашу помощь.
Решение
Придумал способ заставить его работать локально в моей установке Python.В сайт-пакеты \Либ\\ сделайте сценарий под названием "sitecustomize.py" и поставил этот код в нем:
original_input = builtins.input
def input(prompt=''):
return original_input(prompt).rstrip('\r')
input.__doc__ = original_input.__doc__
builtins.input = input
Я ничего не знаю о побочных эффектах этого или о том, какую проверку ошибок я должен выполнять, но это работает, если вы используете PyDev в Windows для написания сценариев с помощью Python3.
Другие советы
Узнал еще кое-что о sitecustomize.py и как это связано с site.py.
Я не знаю, как добавить свой собственный sitecustomize.py в PYTHONPATH для выполнения только в проекте PyDev, поэтому я просто вставил его в $ {Python31dir} \Libs \site-packages.Модуль запускается сейчас, но выдает ошибки.