从C#调用Python应用/脚本

1 投票
2 回答
3272 浏览
提问于 2025-04-15 23:43

我正在搭建一个ASP.NET MVC(C#)的网站,想要实现一种叫做STV(单一可转移投票)的投票方式。我之前在投票场景中使用过OpenSTV,效果很好,但我从来没有在程序中使用过它。

这个OpenSTV的Google代码项目提供了一个Python脚本,可以让其他应用程序使用OpenSTV:

import sys
sys.path.append("path to openstv package")

from openstv.ballots import Ballots
from openstv.ReportPlugins.TextReport import TextReport
from openstv.plugins import getMethodPlugins

(ballotFname, method, reportFname) = sys.argv[1:]

methods = getMethodPlugins("byName")
f = open(reportFname, "w")

try:
    b = Ballots()
    b.loadUnknown(ballotFname)
except Exception, msg:
    print >> f, ("Unable to read ballots from %s" % ballotFname)
    print >> f, msg
    sys.exit(-1)

try:
    e = methods[method](b)
    e.runElection()
except Exception, msg:
    print >> f, ("Unable to count votes using %s" % method)
    print >> f, msg
    sys.exit(-1)

try:
    r = TextReport(e, outputFile=f)
    r.generateReport();
except Exception, msg:
    print >> f, "Unable to write report"
    print >> f, msg
    sys.exit(-1)

f.close()

我能否从我的C# ASP.NET MVC网站中调用这个Python脚本?

如果可以的话,应该怎么做呢?

提前谢谢你们!

2 个回答

3

最好的方法可能是使用IronPython。你可以看看这个回答,它可以作为一个起点。

4

这里有一个很好的例子,讲的是如何从C#调用IronPython,包括如何传递参数和返回结果;当然,你需要把那段代码做成一个函数,把ballotFnamereportFname作为它的参数。

撰写回答