Как отметил Грег, есть очень веская причина, по которой -i
ведет себя так, как он делает. Тем не менее, мне очень полезно иметь загруженный PYTHONSTARTUP
, когда мне нужен интерактивный сеанс. Итак, вот код, который я использую, когда хочу, чтобы PYTHONSTARTUP
был активен в сценарии, запущенном с -i
.
if __name__ == '__main__':
#do normal stuff
#and at the end of the file:
import sys
if sys.flags.interactive==1:
import os
myPythonPath = os.environ['PYTHONSTARTUP'].split(os.sep)
sys.path.append(os.sep.join(myPythonPath[:-1]))
pythonrcName = ''.join(myPythonPath[-1].split('.')[:-1]) #the filename minus the trailing extension, if the extension exists
pythonrc = __import__(pythonrcName)
for attr in dir(pythonrc):
__builtins__.__dict__[attr] = getattr(pythonrc, attr)
sys.path.remove(os.sep.join(myPythonPath[:-1]))
del sys, os, pythonrc
Обратите внимание, что это довольно Hacky, и я не никогда сделать это, не убедившись, что мой pythonrc не случайно затирания переменные и внутренние команды.
Спасибо. Я понимаю, что это хорошее поведение по умолчанию, но хотелось бы знать, можно ли его обойти. Полагаю, я могу просто добавить execfile ("~/.pythonrc") в мои скрипты. – invisiblerhino
@invisiblerhino: он работает с '' 'для вас? – d33tah