我正在尝试从C#应用程序传递一个变量,该变量被用作API连接。
基本上,Outsystems会产生一个信号,C#应用程序会拾取该信号。然后,我想将此变量(单整数)传递到我的python代码(在下面的代码中标记为msg)上,以便它可以使用它运行函数。
我已经研究过了,看来Ironpython有解决方案了:
{
ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
ScriptRuntime runtime = new ScriptRuntime(setup);
ScriptEngine engine = Python.GetEngine(runtime);
ScriptSource source = engine.CreateScriptSourceFromFile("C:\\Scripts\\12\\Testpy\\Testpy\\Testpy.py");
ScriptScope scope = engine.CreateScope();
List<String> argv = new List<String>();
//Do some stuff and fill argv
argv.Add(msg);
engine.GetSysModule().SetVariable("argv", argv);
source.Execute(scope);
}
但是,当它获得source.Execute(scope)端时,它似乎什么也不做(没有错误,只是停止执行)。
我想(?)是因为我的python代码尚未设置为接收变量。但是,这是我不确定如何编写的部分。
不幸的是,我-将值传递到python脚本中的经验很少,但建立了以下简单的示例(从python脚本到python脚本),似乎很正常:
pyA
import pyB
pyB.some_func(2)
pyB
def some_func(a):
print(a)
some_func()
或者,如果有人可以推荐另一种非Iron Python的方法,那也将是惊人的!
提前谢谢!!非常感谢!
答案 0 :(得分:0)
来自此vid中的代码链接:https://www.w3schools.com/xml/tryit.asp?filename=tryajax_xmlhttp
var psi = new ProcessStartInfo();
psi.FileName = @"C:\PythonInstall\python.exe";
// 2) Provide script and arguments
var script = @"C:\AllTech\Code\DaysBetweenDates.py";
var start = "2019-1-1";
var end = "2019-1-22";
psi.Arguments = $"\"{script}\" \"{start}\" \"{end}\"";
// 3) Process configuration
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
// 4) Execute process and get output
var errors = "";
var results = "";
using(var process = Process.Start(psi))
{
errors = process.StandardError.ReadToEnd();
results = process.StandardOutput.ReadToEnd();
}
// 5) Display output
Console.WriteLine("ERRORS:");
Console.WriteLine(errors);
Console.WriteLine();
Console.WriteLine("Results:");
Console.WriteLine(results);