diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2017-06-13 15:04:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-13 15:04:05 -0400 |
commit | a8c64342d13ed0271132d9c41608554db5d5b425 (patch) | |
tree | d6f20d06f80c7dede07963133a7a48bb9484f2fb /cmd2.py | |
parent | 0af8018cdce37e40719e3f6c4023e9525b1e69de (diff) | |
parent | 34c4f3ce4b778d95a67a7d66ed98682ba7464f67 (diff) | |
download | cmd2-git-a8c64342d13ed0271132d9c41608554db5d5b425.tar.gz |
Merge pull request #125 from python-cmd2/script_arguments
Added new pyscript command
Diffstat (limited to 'cmd2.py')
-rwxr-xr-x | cmd2.py | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -1583,6 +1583,42 @@ class Cmd(cmd.Cmd): self._in_py = False return self._should_quit + # noinspection PyUnusedLocal + @options([], arg_desc='<script_path> [script_arguments]') + def do_pyscript(self, arg, opts=None): + """\nRuns a python script file inside the console + +Console commands can be executed inside this script with cmd("your command") +However, you cannot run nested "py" or "pyscript" commands from within this script +Paths or arguments that contain spaces must be enclosed in quotes +""" + if not arg: + self.perror("pyscript command requires at least 1 argument ...", traceback_war=False) + self.do_help('pyscript') + return + + if not USE_ARG_LIST: + arg = shlex.split(arg, posix=POSIX_SHLEX) + + # Get the absolute path of the script + script_path = os.path.abspath(os.path.expanduser(arg[0])) + + # Save current command line arguments + orig_args = sys.argv + + # Overwrite sys.argv to allow the script to take command line arguments + sys.argv = [script_path] + sys.argv.extend(arg[1:]) + + # Run the script + self.do_py("run('{}')".format(arg[0])) + + # Restore command line arguments to original state + sys.argv = orig_args + + # Enable tab completion of paths for pyscript command + complete_pyscript = path_complete + # Only include the do_ipy() method if IPython is available on the system if ipython_available: # noinspection PyMethodMayBeStatic,PyUnusedLocal |