[英]Read a file and extract data and assign to a variable from a python file
我正在嘗試從 conan.txt 文件中提取 BINPATH、LIBPATH、CPPPATH,該文件如下所示:
conan = {
"conan" : {
"CPPPATH" : ['something'],
"BINPATH" : ['something'],
"LIBS" : ['something'],
"CPPDEFINES" : [],
"CXXFLAGS" : [],
"CCFLAGS" : [],
"SHLINKFLAGS" : [],
"LINKFLAGS" : [],
},
"conan_version" : "None",
"boost" : {
"CPPPATH" : ['C:\\.conan\\123456\\1\\include'],
"LIBPATH" : ['C:\\.conan\\123456\\1\\lib'],
"BINPATH" : ['C:\\.conan\\123456\\1\\lib'],
"LIBS" : [],
"CPPDEFINES" : [],
"CXXFLAGS" : [],
"CCFLAGS" : [],
"SHLINKFLAGS" : [],
"LINKFLAGS" : [],
},
"boost_version" : "1.69.0"
}
Return('conan')
我有一個 scons /python 文件,它需要 CPPPATH、BINPATH、LIBPATH 值作為變量。 我試圖在 Sconscript 的以下函數中提取這些值:
def getCPPPath():
data = {'Return': lambda x: False}
with open(file.txt, 'r') as f:
exec(f.read(), data)
return (data["conan"]["conan"]["CPPPATH"][0])
print ("Path is:", ["conan"]["conan"]["CPPPATH"][0])
這給了我一個錯誤:
scons: *** Return of non-existent variable ''conan''
我怎樣才能做到這一點?
您可以使用以下代碼。 請注意, exec是不安全的,因為它運行您的file.txt
所有代碼。 您還需要將一個虛擬的Return
函數傳遞給exec
。
data = {"Return": lambda x: False}
with open("file.txt", "r", encoding="utf-8") as f:
exec(f.read(), data)
print(data['conan']['conan']['BINPATH'][0])
print(data['conan']['boost']['LIBPATH'][0])
print(data['conan']['conan']['CPPPATH'][0])
印刷
['something']
['C:\\.conan\\123456\\1\\lib']
['something']
使用 exec 更容易且無需使用。 您需要將文件conan.py
(<= 注意 .py 結尾):
import conan
data = conan.conan
print(data['conan']['BINPATH'])
=> ['something']
假設您嘗試使用 SCons 設置 Conan,還有另一種方法。 如果這是“正常”的 Python,那么其他兩個答案將是完全正確的。 但是,由於您顯然在 Conan 中使用了 SCons 生成器(否則,您將不會得到該文件),因此您有一個與 SCons 兼容的文件。 SCons 自然地在 Python 之上添加了用於管理其“自己的”文件的附加功能。
因此,您根本不需要 exec 。 這就是你所需要的:
conan = env.SConscript("SConscript_conan")
# Note: you may need to change the path to SConscript_conan depending on your
# build system configuration. If you installed Conan in `build`, the
# path should be "build/SConscript_conan"
env.MergeFlags(conan["conan"])
這也確保您添加所需的所有其他標志,而不僅僅是路徑。 如果您決定添加另一個庫,還可以節省您的手動設置。
Return('conan')
是一個函數SCons的,這基本上等效於返回變量(這里: conan
)從成任何執行它的一個SConscript文件。 不正確的執行,或者當然缺少變量的存在,足以導致函數拋出。 如果您正確獲取 SConscript 文件,它應該會按預期工作。
另請參閱柯南文檔,特別是第二個代碼片段,以及SConscript 文件上的 SCons 文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.