New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
InteractiveConsole behaves differently on terminal, within script #77450
Comments
on terminal push and runcode accepts indentation where required (like for loop etc), within script gives error message on terminal import works properly and objects can be found as normal, within script you may need to add module name upfront simple example you will get normal expected output on terminal, but indentation error within script ii.push("from time import sleep")
ii.push("sleep(1)")
will sleep 1 sec on terminal, but will give name error |
Attached is a non working example |
This script works OK. Compare with iitests.py uploaded before |
[For future reference, if I were not closing this, I would ask the following: Does 'on terminal mean that you started Python in interactive mode and then entered lines in response to the '>>> prompt'? If so, did you start Python from an actual (non-Python) terminal or console? or from an icon or start menu? What OS? When you ran a script, did you run it from the system console or from the file itself? However, I now consider this a moot point.] The test for the code module is test.test_code_module, as test_code self.infunc.side_effect = ["try: ham\nexcept: eggs\n",
EOFError('Finished')] I cannot see that you have identified a real problem. Your iitests.py fails because it is buggy. It creates a new interactive console for each line. When " print('i', i)" is pushed to a new console, in response to >>>, there *should* be an indentation error. Similarly, 'sleep(1)' in a new console *should* fail with a NameError. In iiteswok.py, which you say works, only one console is created. After adding 'ii.push("")', to tell the console that the statement is complete, and removing unneeded code, the following works for me when run as a script import code
ii = code.InteractiveConsole()
ii.push("for i in range(3):")
ii.push(" print ('i', i)")
ii.push("") # prints i 0 Adding ii.push("from time import sleep")
ii.push("print('start')")
ii.push("sleep(1)")
ii.push("print('stop')") prints 'start' and 'stop' with a one second delay. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: