diff --git a/IPython/core/profiledir.py b/IPython/core/profiledir.py index 25ad5b4..7cc9e13 100644 --- a/IPython/core/profiledir.py +++ b/IPython/core/profiledir.py @@ -59,9 +59,11 @@ class ProfileDir(LoggingConfigurable): security_dir_name = Unicode('security') log_dir_name = Unicode('log') + startup_dir_name = Unicode('startup') pid_dir_name = Unicode('pid') security_dir = Unicode(u'') log_dir = Unicode(u'') + startup_dir = Unicode(u'') pid_dir = Unicode(u'') location = Unicode(u'', config=True, @@ -81,6 +83,7 @@ class ProfileDir(LoggingConfigurable): # ensure config files exist: self.security_dir = os.path.join(new, self.security_dir_name) self.log_dir = os.path.join(new, self.log_dir_name) + self.startup_dir = os.path.join(new, self.startup_dir_name) self.pid_dir = os.path.join(new, self.pid_dir_name) self.check_dirs() @@ -91,6 +94,13 @@ class ProfileDir(LoggingConfigurable): if not os.path.isdir(self.log_dir): os.mkdir(self.log_dir) + def _startup_dir_changed(self, name, old, new): + self.check_startup_dir() + + def check_startup_dir(self): + if not os.path.isdir(self.startup_dir): + os.mkdir(self.startup_dir) + def _security_dir_changed(self, name, old, new): self.check_security_dir() diff --git a/IPython/core/shellapp.py b/IPython/core/shellapp.py index 95a115f..6549c24 100644 --- a/IPython/core/shellapp.py +++ b/IPython/core/shellapp.py @@ -22,6 +22,7 @@ Authors from __future__ import absolute_import +import glob import os import sys @@ -175,6 +176,7 @@ class InteractiveShellApp(Configurable): def init_code(self): """run the pre-flight code, specified via exec_lines""" + self._run_startup_files() self._run_exec_lines() self._run_exec_files() self._run_cmd_line_code() @@ -230,6 +232,22 @@ class InteractiveShellApp(Configurable): finally: sys.argv = save_argv + def _run_startup_files(self): + """Run files from profile startup directory""" + startup_dir = self.profile_dir.startup_dir + startup_files = glob.glob(os.path.join(startup_dir, '*.py')) + startup_files += glob.glob(os.path.join(startup_dir, '*.ipy')) + if not startup_files: + return + + self.log.debug("Running startup files from %s...", startup_dir) + try: + for fname in sorted(startup_files): + self._exec_file(fname) + except: + self.log.warn("Unknown error in handling startup files:") + self.shell.showtraceback() + def _run_exec_files(self): """Run files from IPythonApp.exec_files""" if not self.exec_files: