On Fri, 16 Feb 2018 14:18:16 -0800, windhorn wrote about running scripts from the interpreter:
[...] > That works, but nothing is very convenient for debugging simple scripts. > If I run the script from a command prompt it works, but I lose all my > other stuff (debugging functions, variables, etc.). I'm sorry, reading your description of the various steps you tried brought to my mind a chef insisting that the only cooking implement he needs is a spoon, and then complaining that it's not well suited to slicing meat :-) The interactive interpreter, or REPL (Read-Eval-Print Loop) is not designed for the edit-run-debug-edit cycle. But it can be used as a single component of that development process. For me, the tool I use is a set of re-usable tools: - a text editor; - a system command prompt in a terminal/console window; - a Python REPL for running code snippets and looking up help(obj). Other people prefer a IDE like Spyder (or many others). Either way, they're designed for the edit-run-debug-edit cycle. I edit the source code of my script in the text editor, then run it from the command prompt using python myscript.py If I need the debugger, I use: python -i myscript.py I often use test driven development, so I have a set of tests written. I edit the tests, then run the test suite: python myscript_tests.py then edit the script to make the tests work. The best part of this is each time you run the script, it is guaranteed to be running *fresh*, with no left-over cruft from previous runs. Trust me, after you've spent hours trying to debug a mysterious problem in your code, only to discover that it was a side-effect of re-using the same interactive session that ran an older version of your code, you too will shudder at the thought of trying to do all your development in an on- going, persistent REPL session. > More a comment than a question but seems like sometimes execfile() is > the right tool. I'm sure that it is; but the question, the right tool for what? -- Steve -- https://mail.python.org/mailman/listinfo/python-list