Show More
@@ -1422,7 +1422,8 b' Currently the magic system has the following functions:\\n"""' | |||
|
1422 | 1422 | return None |
|
1423 | 1423 | |
|
1424 | 1424 | @testdec.skip_doctest |
|
1425 |
def magic_run(self, parameter_s ='',runner=None |
|
|
1425 | def magic_run(self, parameter_s ='',runner=None, | |
|
1426 | file_finder=get_py_filename): | |
|
1426 | 1427 | """Run the named file inside IPython as a program. |
|
1427 | 1428 | |
|
1428 | 1429 | Usage:\\ |
@@ -1537,7 +1538,7 b' Currently the magic system has the following functions:\\n"""' | |||
|
1537 | 1538 | mode='list',list_all=1) |
|
1538 | 1539 | |
|
1539 | 1540 | try: |
|
1540 |
filename = |
|
|
1541 | filename = file_finder(arg_lst[0]) | |
|
1541 | 1542 | except IndexError: |
|
1542 | 1543 | warn('you must provide at least a filename.') |
|
1543 | 1544 | print '\n%run:\n',OInspect.getdoc(self.magic_run) |
@@ -1573,11 +1574,29 b' Currently the magic system has the following functions:\\n"""' | |||
|
1573 | 1574 | main_mod = FakeModule() |
|
1574 | 1575 | prog_ns = main_mod.__dict__ |
|
1575 | 1576 | prog_ns['__name__'] = name |
|
1577 | ||
|
1576 | 1578 | # The shell MUST hold a reference to main_mod so after %run exits, |
|
1577 | 1579 | # the python deletion mechanism doesn't zero it out (leaving |
|
1578 | 1580 | # dangling references) |
|
1581 | ||
|
1582 | # XXX - the note above was written without further detail, but this | |
|
1583 | # code actually causes problems. By holding references to the | |
|
1584 | # namespace where every script is executed, we effectively disable | |
|
1585 | # just about all possible variable cleanup. In particular, | |
|
1586 | # generator expressions and other variables that point to open | |
|
1587 | # files are kept alive, and as a user session lives on, it may run | |
|
1588 | # out of available file descriptors. Such a bug has already been | |
|
1589 | # reported by JD Hunter. I'm disabling this for now, but we need | |
|
1590 | # to clarify exactly (and add tests) what from main_mod needs to be | |
|
1591 | # kept alive and what is save to remove... In fact, see note | |
|
1592 | # below, where we append main_mod to sys.modules and then delete it | |
|
1593 | # again. The final cleanup is rendered moot by this reference kept | |
|
1594 | # in _user_main_modules(), so we really need to look into this. | |
|
1595 | ||
|
1579 | 1596 | self.shell._user_main_modules.append(main_mod) |
|
1580 | 1597 | |
|
1598 | # /XXX | |
|
1599 | ||
|
1581 | 1600 | # Since '%run foo' emulates 'python foo.py' at the cmd line, we must |
|
1582 | 1601 | # set the __file__ global in the script's namespace |
|
1583 | 1602 | prog_ns['__file__'] = filename |
General Comments 0
You need to be logged in to leave comments.
Login now