2016-05-13 59 views
0

我运行了一堆脚本,通常我将它们的结果存储在MongoDB中。为了确保我可以将结果与输入脚本链接,我将整个脚本作为文本存储。将* .py脚本转换为字符串

module = importlib.import_module(module) 
    with open(module.__file__) as ff: 
     source = ff.read() 

运用同样的伎俩在Python 2个结果一团糟:这使用下面的代码片段精美的作品在Python 3。最初,变量模块是一个字符串,例如a.b.foo。不幸的是,我还不能废除Python 2。

+1

究竟你是什么意思与“一塌糊涂”?它会抛出一个错误吗?结果是否与您的期望不同?也许这是一个编码错误? – syntonym

+0

with语句可能不包含在早期的2.x Python版本中 – linusg

+0

我正在使用2.7.10 – tschm

回答

2

在许多情况下,您不会得到带* __file__的* .py文件,而是* .pyc文件。你的情况确实是一团糟。只要切断文件名的最后一个字符;)

import os 
import importlib 

#new_module = __import__("module") 
new_module = importlib.import_module("module") 

new_module_filename = os.path.realpath(new_module.__file__) 
if new_module_filename.endswith(".pyc"): 
    new_module_filename = new_module_filename[:-1] 

with open(new_module_filename) as ff: 
    source = ff.read() 
print(source) 
+0

天哪,这有点破解。访问模块对象的“私人”成员,然后摆弄结果字符串。它的工作原理如下:-)谢谢 – tschm

+0

欢迎您¯\ _(ツ)_ /¯ – salomonderossi

0

你可以简单地做:

import sys 
f= open(sys.argv[0]) 
content = f.read() 
print content