C#中的Python嵌入(cTrader/cAlgo bot PyTorch调用bug)
我正试图在我的C#脚本中运行一些Python代码,这是一个叫做“cAlgo机器人”的东西,使用一个API与一个名为“cTrader”的程序进行交互。然而,我认为这部分在技术上与我遇到的问题无关。我正在使用C#Python脚本运行程序(代码如下)运行Python代码。我使用命令行来实现这一点,并用空格分隔参数 当我运行C#中的Python嵌入(cTrader/cAlgo bot PyTorch调用bug),c#,python,algorithmic-trading,python-embedding,C#,Python,Algorithmic Trading,Python Embedding,我正试图在我的C#脚本中运行一些Python代码,这是一个叫做“cAlgo机器人”的东西,使用一个API与一个名为“cTrader”的程序进行交互。然而,我认为这部分在技术上与我遇到的问题无关。我正在使用C#Python脚本运行程序(代码如下)运行Python代码。我使用命令行来实现这一点,并用空格分隔参数 当我运行test_python_script1.py时,输出成功打印在cTrader日志中,我在C#中访问该数据。但是,当我运行test\u python\u script2.py时,输出没
test_python_script1.py
时,输出成功打印在cTrader日志中,我在C#中访问该数据。但是,当我运行test\u python\u script2.py
时,输出没有通过。这些文件之间唯一的区别是,第二个文件运行行model=torch.load(“saved\u model\u 1”)
。我尝试在这个线路调用期间抑制控制台输出,但没有成功
有人知道我如何运行这一行并将输出输入我的cAlgo机器人吗
除了简单地让当前代码工作外,还有三种潜在的解决方案:
如果不知道“saved_model_1”文件中的内容,几乎不可能提供帮助。很明显,torch无法导入该功能。还有,为什么对相同的内容使用不同的编码结构?厕所很奇怪,似乎不是Python编码的标准方式(任何事情都可能发生)。坚持使用第二个版本,指定您正在使用的python版本,并提供您得到的错误。如有必要,请在CLI中运行,并添加详细信息。感谢您的评论。实际上,Torch可以导入该文件。事实证明,C#脚本需要使用这一行:
string model_python_script=MV_LSTM_v1_1b.RunFromCmd(WindowsUsername,“C:\\Users\\”+WindowsUsername+“\\modelfiles\\model_eval.py”,args)代码>而不是我问题中的那个。
import sys import torch
# model = torch.load("saved_model_1")
def add_numbers(x,y): sum = x + y return sum
num1 = float(sys.argv[1]) num2 = float(sys.argv[2])
print(add_numbers(num1, num2))
import sys
import torch
model = torch.load("saved_model_1")
def add_numbers(x,y):
sum = x + y
return sum
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
print(add_numbers(num1, num2))
using System;
using System.Linq;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
public class TomTest : Robot
{
// Windows username
[Parameter(DefaultValue = "Tom")]
public string WindowsUsername { get; set; }
// Python script runner
// args separated by spaces
public static string RunFromCmd(string rWindowsUsername, string rCodeFilePath, string args)
{
string result = string.Empty;
try
{
var info = new ProcessStartInfo("C:\\Users\\" + rWindowsUsername + "\\anaconda3\\python.exe")
{
Arguments = rCodeFilePath + " " + args,
RedirectStandardInput = false,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (var proc = new Process())
{
proc.StartInfo = info;
proc.Start();
proc.WaitForExit();
if (proc.ExitCode == 0)
{
result = proc.StandardOutput.ReadToEnd();
}
}
return result;
}
catch (Exception ex)
{
throw new Exception("Python script failed: " + result, ex);
}
}
protected override void OnStart()
{
string test_python_script = TomTest.RunFromCmd(WindowsUsername, "C:\\Users\\" + WindowsUsername + "\\Desktop\\test_python_script.py", "0.5 0.5");
Print("test script output: " + test_python_script);
}
protected override void OnTick()
{
// do nothing
}
protected override void OnStop()
{
// do nothing
}
}
}