c# - 在 C# 和 Python 之间传递变量(IronPython?)
问题描述
我正在尝试从 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 方式,那也太棒了!
提前致谢!!非常感激!
解决方案
从此视频中的代码链接:https ://www.youtube.com/watch?v=g1VWGdHRkHs
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);
推荐阅读
- c# - 我可以使用 ExpressionVisitor 遍历表达式主体成员吗?
- java - Apache Camel 文件组件:聚合后的异常应将文件移动到 .error 文件夹
- docker - 无法使用 Heroku 部署调用容器的端点
- java - java尝试获取输入时没有此类元素异常
- python - 术语“pipx”未被识别为 cmdlet 的名称
- css - 未应用 Wordpress CSS
- java - Spring Boot @Value 注释返回 null
- html - HTML/CSS - 悬停时在屏幕中央以实际大小显示图像,点击再次缩小?
- javascript - 表列数据中不需要的前导空格
- python - 如何使用新行将内容写入具有多个输入的文本文件?