Show More
@@ -14,7 +14,6 | |||
|
14 | 14 | # Imports |
|
15 | 15 | #----------------------------------------------------------------------------- |
|
16 | 16 | |
|
17 | from __future__ import with_statement | |
|
18 | 17 | from __future__ import absolute_import |
|
19 | 18 | from __future__ import print_function |
|
20 | 19 | |
@@ -2514,7 +2513,7 class InteractiveShell(SingletonConfigurable): | |||
|
2514 | 2513 | # raised in user code. It would be nice if there were |
|
2515 | 2514 | # versions of runlines, execfile that did raise, so |
|
2516 | 2515 | # we could catch the errors. |
|
2517 | self.run_cell(thefile.read(), store_history=False) | |
|
2516 | self.run_cell(thefile.read(), store_history=False, shell_futures=False) | |
|
2518 | 2517 | except: |
|
2519 | 2518 | self.showtraceback() |
|
2520 | 2519 | warn('Unknown failure executing file: <%s>' % fname) |
@@ -2548,7 +2547,7 class InteractiveShell(SingletonConfigurable): | |||
|
2548 | 2547 | self._current_cell_magic_body = None |
|
2549 | 2548 | return self.run_cell_magic(magic_name, line, cell) |
|
2550 | 2549 | |
|
2551 | def run_cell(self, raw_cell, store_history=False, silent=False): | |
|
2550 | def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True): | |
|
2552 | 2551 | """Run a complete IPython cell. |
|
2553 | 2552 | |
|
2554 | 2553 | Parameters |
@@ -2562,6 +2561,11 class InteractiveShell(SingletonConfigurable): | |||
|
2562 | 2561 | silent : bool |
|
2563 | 2562 | If True, avoid side-effects, such as implicit displayhooks and |
|
2564 | 2563 | and logging. silent=True forces store_history=False. |
|
2564 | shell_futures : bool | |
|
2565 | If True, the code will share future statements with the interactive | |
|
2566 | shell. It will both be affected by previous __future__ imports, and | |
|
2567 | any __future__ imports in the code will affect the shell. If False, | |
|
2568 | __future__ imports are not shared in either direction. | |
|
2565 | 2569 | """ |
|
2566 | 2570 | if (not raw_cell) or raw_cell.isspace(): |
|
2567 | 2571 | return |
@@ -2579,6 +2583,16 class InteractiveShell(SingletonConfigurable): | |||
|
2579 | 2583 | self._current_cell_magic_body = \ |
|
2580 | 2584 | ''.join(self.input_splitter.cell_magic_parts) |
|
2581 | 2585 | cell = self.input_splitter.source_reset() |
|
2586 | ||
|
2587 | # Our own compiler remembers the __future__ environment. If we want to | |
|
2588 | # run code with a separate __future__ environment, use the default | |
|
2589 | # compiler | |
|
2590 | if shell_futures: | |
|
2591 | compiler = self.compile | |
|
2592 | ast_parse = self.compile.ast_parse | |
|
2593 | else: | |
|
2594 | compiler = compile | |
|
2595 | ast_parse = ast.parse | |
|
2582 | 2596 | |
|
2583 | 2597 | with self.builtin_trap: |
|
2584 | 2598 | prefilter_failed = False |
@@ -2608,8 +2622,7 class InteractiveShell(SingletonConfigurable): | |||
|
2608 | 2622 | |
|
2609 | 2623 | with self.display_trap: |
|
2610 | 2624 | try: |
|
2611 |
code_ast = |
|
|
2612 | filename=cell_name) | |
|
2625 | code_ast = ast_parse(cell, filename=cell_name) | |
|
2613 | 2626 | except IndentationError: |
|
2614 | 2627 | self.showindentationerror() |
|
2615 | 2628 | if store_history: |
@@ -2626,7 +2639,7 class InteractiveShell(SingletonConfigurable): | |||
|
2626 | 2639 | |
|
2627 | 2640 | interactivity = "none" if silent else self.ast_node_interactivity |
|
2628 | 2641 | self.run_ast_nodes(code_ast.body, cell_name, |
|
2629 | interactivity=interactivity) | |
|
2642 | interactivity=interactivity, compiler=compiler) | |
|
2630 | 2643 | |
|
2631 | 2644 | # Execute any registered post-execution functions. |
|
2632 | 2645 | # unless we are silent |
@@ -2682,7 +2695,8 class InteractiveShell(SingletonConfigurable): | |||
|
2682 | 2695 | return ast.fix_missing_locations(node) |
|
2683 | 2696 | |
|
2684 | 2697 | |
|
2685 |
def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr' |
|
|
2698 | def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr', | |
|
2699 | compiler=compile): | |
|
2686 | 2700 | """Run a sequence of AST nodes. The execution mode depends on the |
|
2687 | 2701 | interactivity parameter. |
|
2688 | 2702 | |
@@ -2699,6 +2713,9 class InteractiveShell(SingletonConfigurable): | |||
|
2699 | 2713 | will run the last node interactively only if it is an expression (i.e. |
|
2700 | 2714 | expressions in loops or other blocks are not displayed. Other values |
|
2701 | 2715 | for this parameter will raise a ValueError. |
|
2716 | compiler : callable | |
|
2717 | A function with the same interface as the built-in compile(), to turn | |
|
2718 | the AST nodes into code objects. Default is the built-in compile(). | |
|
2702 | 2719 | """ |
|
2703 | 2720 | if not nodelist: |
|
2704 | 2721 | return |
@@ -2723,13 +2740,13 class InteractiveShell(SingletonConfigurable): | |||
|
2723 | 2740 | try: |
|
2724 | 2741 | for i, node in enumerate(to_run_exec): |
|
2725 | 2742 | mod = ast.Module([node]) |
|
2726 |
code = |
|
|
2743 | code = compiler(mod, cell_name, "exec") | |
|
2727 | 2744 | if self.run_code(code): |
|
2728 | 2745 | return True |
|
2729 | 2746 | |
|
2730 | 2747 | for i, node in enumerate(to_run_interactive): |
|
2731 | 2748 | mod = ast.Interactive([node]) |
|
2732 |
code = |
|
|
2749 | code = compiler(mod, cell_name, "single") | |
|
2733 | 2750 | if self.run_code(code): |
|
2734 | 2751 | return True |
|
2735 | 2752 |
General Comments 0
You need to be logged in to leave comments.
Login now