def run_script(self, pathname, caller=None):
"""
Create a node by path (not module name). It is expected to be a Python
source file, and will be scanned for dependencies.
"""
self.msg(2, "run_script", pathname)
pathname = os.path.realpath(pathname)
m = self.findNode(pathname)
if m is not None:
return m
if sys.version_info[0] != 2:
with open(pathname, 'rb') as fp:
encoding = util.guess_encoding(fp)
with open(pathname, _READ_MODE, encoding=encoding) as fp:
contents = fp.read() + '\n'
else:
with open(pathname, _READ_MODE) as fp:
contents = fp.read() + '\n'
co_ast = compile(contents, pathname, 'exec', ast.PyCF_ONLY_AST, True)
co = compile(co_ast, pathname, 'exec', 0, True)
m = self.createNode(Script, pathname)
self._updateReference(caller, m, None)
self._scan_code(m, co, co_ast)
m.code = co
if self.replace_paths:
m.code = self._replace_paths_in_code(m.code)
return m
评论列表
文章目录