Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建一个在c中执行python的类#_C#_Python - Fatal编程技术网

C# 创建一个在c中执行python的类#

C# 创建一个在c中执行python的类#,c#,python,C#,Python,我有一个python代码。我需要从我的c#程序中执行python脚本。在对此进行了一些研究之后,我了解到从c#执行python脚本主要有两种方法 一个是使用“进程”命令和 另一种是使用铁蟒 我的问题可能看起来很愚蠢,有没有其他方法可以执行python脚本?更具体地说,我可以创建一个类,比如c#中的“Python”和一个成员函数“execute_script”,它不使用像iron Python这样的api,也不创建执行脚本的进程,这样如果调用“execute_scit(mypythonprogra

我有一个python代码。我需要从我的c#程序中执行python脚本。在对此进行了一些研究之后,我了解到从c#执行python脚本主要有两种方法

一个是使用“进程”命令和

另一种是使用铁蟒


我的问题可能看起来很愚蠢,有没有其他方法可以执行python脚本?更具体地说,我可以创建一个类,比如c#中的“Python”和一个成员函数“execute_script”,它不使用像iron Python这样的api,也不创建执行脚本的进程,这样如果调用“execute_scit(mypythonprogram.py)”,我的脚本就会被执行。如果这看起来很愚蠢,我很抱歉。如果这是可能的,请帮助我。提前感谢。

您可以将python嵌入到应用程序中。查看python文档部分扩展和嵌入>

<>编辑:这需要C++,但是不难构建一个C++包,可以用C语言(参见)。

< P>可以创建一个调用python脚本的Cyl类,而不用Python和不用任何外部API吗?不,那是不可能的。您还有一些其他选择:

  • 将Python运行时集成到程序中 Smead已经描述了一种实现这一点的方法。它可以工作,并且可以避免创建另一个进程,但是要让它运行起来需要做很多工作,而且从技术上讲它仍然使用API。对于不需要来回传递数据的单个Python脚本,我不建议这样做,但如果您的其他选项没有成功,最好知道该选项存在

  • 使用流程模块 这可能就是我要做的。当恶意用户可能导致您执行伪造的shell命令,或者恶意用户可以替换Python脚本的内容时,进程会有安全问题。当你能锁定这两件东西时,它是相当安全的

    速度不太可能是个问题。实际上,设置一个带有进程调用的C#程序只需要几分钟,因此,如果你的导师关心速度,就编写它并测量速度,看看它是否真的是一个问题

  • 考虑用C语言重写脚本#

  • C#是一种非常有表现力的语言,有一个非常强大的标准库,因此假设您的脚本没有数千行长,并且没有使用任何晦涩难懂的Python库,那么这实际上可能不需要做很多工作。如果你真的不应该使用流程,这是我会考虑的下一个解决方案。 我不是C#开发人员,但您不打算调用
    execute\u scipt(“mypythonprogram.py”)
    并选择使用基本相同的东西吗?你的
    Python
    类难道不是
    系统的一个薄薄的包装器吗?你只需要执行脚本吗?您是否需要将任何结果返回到C#?您能保证目标系统始终安装Python,并且在路径上吗?若你们并没有特殊的要求,那个么这个过程可能是目前为止最简单的方法。需要公正的执行。我目前正在尝试开发一个框架。我的导师要求我不要使用这个过程,因为它可能会减慢这个过程,并且还会出现一些安全问题。这就是我问这个问题的原因。MSDN文章涉及在C++代码和托管C代码之间创建一个C++/CLI桥,这也需要至少对Python头进行引用,这将需要在Windows开发环境中额外增加一部分。所有这些听起来都是可能的,但仅仅运行一个脚本(取决于他的需要)就需要大量的工作,而这个脚本(取决于他的需要)可以通过一行shell命令来实现。这是真的,但我相信这是在没有第三方API的情况下完成的唯一方法,或者按照询问者的要求创建一个新流程。这还有一个优点,即不需要用户安装Python。