在不使用ExecString的 Delphi 代码中加载Python模块并调用其函数

0ve6wy6x  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(106)

我一直在寻找一种在Delphi代码中调用Python函数(使用Python 4Delphi)而不直接需要TPythonEngine.ExecStrings执行的方法。
我的基本想法是加载一个模块,例如,example.py看起来像:

def DoExample(pStr: str) -> str:
    pStr = "Example: " + pStr
    return pStr

字符串
并称之为(免责声明:我想拥有的行为示例,而不是实际的P4 D行为):

MyPythonEngine := TPythonEngine.Create(nil);
{necessary version, flags and LoadDll}
MyPythonModule := TPythonModule.Create(nil);
{necessary configs again}
MyImportedFunction := {Load the DoExample somehow and store it in this variable}
ResultOfMyImportedFunction := MyImportedFunction("This is an example"); {This should be Example: This is an example}


我也可以通过调整example.py来实现我的目标:

import sys

def DoExample(pStr: str) -> str:
    pStr = "Example: " + pStr
    return pStr

DoExample(sys.argv[1])


就像我在《圣经》中所说的那样,仍然需要得到它的结果。
我已经仔细阅读了演示,没有找到一个合理的答案,我的问题。也没有进一步阅读的文档(或至少我找不到它)。
此外,由于缺乏文档,我不知道这种方法是否可行。
我想加载一个python脚本,使用它定义的一个函数,在 Delphi 中调用它,并将结果检索到一个变量中。
提前感谢!新年快乐。

qni6mghb

qni6mghb1#

来自pycripter在Delphi-Praxis论坛上的回答:

var SL := TStringList.Crete;
try
  SL.LoadFromFile('example.py');
  PyEngine.ExecStrings(SL);
  var Res := MainModule.DoExample('input');
finally
  SL.Free;
end;

字符串

相关问题