从python调用java的最佳方法是什么?(jython和RPC不是我的选择).
我听说过JCC:http://pypi.python.org/pypi/JCC/1.9 一个C++代码生成器,用于从C++/Python调用Java但是这需要编译每个可能的调用; 我更喜欢另一种解决方案.
我听说过JPype:http ://jpype.sourceforge.net/ tutorial:http://www.slideshare.net/onyame/mixing-python-and-java
import jpype
jpype.startJVM(path to jvm.dll, "-ea")
javaPackage = jpype.JPackage("JavaPackageName")
javaClass = javaPackage.JavaClassName
javaObject = javaClass()
javaObject.JavaMethodName()
jpype.shutdownJVM()
Run Code Online (Sandbox Code Playgroud)
这看起来像我需要的.但是,最后一个版本是从2009年1月开始的,我看到人们无法编译JPype.
JPype是一个死的项目吗?
还有其他选择吗?
问候,大卫
如何在python中加载ac#dll?
我是否必须在c#文件中添加一些额外的代码?(比如在c ++文件中导出)
我不想使用IronPython.我想将模块导入Python!
我正在尝试在C#中创建一个DLL,以便在其他几种语言中使用.我找到了RGiesecke的DllExport,但似乎没有用.它构建得很好并且创建了一个dll,但是当我在Dependency Walker中打开它时它没有显示任何函数,我的调用代码也找不到它们.
我创建了一个新的"类库"项目(VS 2013),然后从NuGet安装了"Unmanaged Exports(DllExport for .Net)".我需要任何项目设置吗?
这是我的代码.
using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
namespace ToolServiceDLL
{
public class Class1
{
[DllExport("addUp", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static double addUp(double num1, double num2)
{
return num1 + num2;
}
[DllExport("get5", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static int get5()
{
return 5;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在 Python 和 C# 之间传递二进制信息。我假设您可以打开一个标准的输入/输出通道并像文件一样读取和写入该通道,但是有很多移动部件,而且我不太了解 C#。我想做这种事情,但不写文件。
# python code
with open(DATA_PIPE_FILE_PATH, 'wb') as fid:
fid.write(blob)
subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH)
with open(DATA_PIPE_FILE_PATH, 'rb') as fid:
'Do stuff with the data'
// C# code
static int Main(string[] args){
byte[] binaryData = File.ReadAllBytes(DataPipeFilePath);
byte[] outputData;
// Create outputData
File.WriteAllBytes(outputData)
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的使用标准输入/输出的方法,但我没有运气将它们匹配起来,就像我说的,有很多移动部件。我尝试过类似的事情
p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(blob)
p.stdin.close()
Run Code Online (Sandbox Code Playgroud)
或者
p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(blob)
Run Code Online (Sandbox Code Playgroud)
在 python 一侧以及
TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
String str = tIn.ReadToEnd();
//etc...
Run Code Online (Sandbox Code Playgroud)
以及其他一些在 C# 端不起作用的东西。我在某些事情上取得了一些成功,但我已经改变了太多,以至于我不记得什么是有效的。有人可以给我一些提示,告诉我哪些部分效果最好,或者这是否可能? …
以下是 C# 代码。如何使用 pythonnet 从 Python 调用 NonGenericClass 内的 GenericMethod()?
namespace CSharpTestCode
{
public interface Person
{
}
public class Employee : Person
{
}
public class TempGenericClass<T>
{
}
public class NonGenericClass
{
public static T GenericMethod<T>(TempGenericClass<T> tempGeneric) where T : class, Person
{
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的 Python 代码:
import clr
clr.AddReference(r'\Documents\visual studio 2015\Projects\SamplePythonApp\CSharpTestCode\bin\Debug\CSharpTestCode.dll')
from CSharpTestCode import *
genericMethod = NonGenericClass.GenericMethod(TempGenericClass[Employee]())
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Unhandled Exception: System.ArgumentException: GenericArguments[0], 'CSharpTestCode.TempGenericClass`1[CSharpTestCode.Employee]', on 'T GenericMethod[T](CSharpTestCode.TempGenericClass`1[T])' violates the constraint of type 'T'. …Run Code Online (Sandbox Code Playgroud)