C#调用Python程序传参数获得返回值

目录
  • 说明
  • 1. Python 脚本
  • 2. 打包成Windows可执行文件
  • 3. C# 程序
  • 4. 参考

说明

C# 调用 Python 程序有多种方式,本篇用的是第 4 种:

  • nuget的ironPython;
  • 用 c/c++ 调用python,再封装成库文件,c# 调用;
  • c# 命令行调用.py文件执行;
  • python 程序制作成 .exe 可执行文件,c# 使用命令行进行传参取返回值。

1. Python 脚本

先建个测试脚本 d://Test/EchoHi.py 代码如下:

import sys
def EchoHi(a):
    return ("Hello, " + a)
if __name__ == "__main__":
    # print('参数列表:', str(sys.argv))
    print(EchoHi(sys.argv[1]))

测试一哈

D:\Test>python EchoHi.py Mr.Tree
Hello, Mr.Tree

2. 打包成Windows可执行文件

首先安装给python打包的python包

D:\Test>pip install pyinstaller

执行打包命令,看输出

D:\Test>pyinstaller -F EchoHi.py

21185 INFO: Writing RT_ICON 7 resource with 1128 bytes
21192 INFO: Updating manifest in D:\Test\build\EchoHi\run.exe.0u78g5s3
21444 INFO: Updating resource type 24 name 1 language 0
21447 INFO: Appending archive to EXE D:\Test\dist\EchoHi.exe
21634 INFO: Building EXE from EXE-00.toc completed successfully.

这里有生成的可执行文件的位置,进入可执行文件的目录测试

D:\Test\dist>EchoHi.exe Mr.Tree
Hello, Mr.Tree

3. C# 程序

CallCmd.cs 代码如下

using System;
class Test
{
    public static void Main(String[] args)
    {
      string cmdpath = "d://Test/dist/EchoHi.exe";
      string arguments = "Mr.Cmd";
      Console.WriteLine(CallCMD(cmdpath, arguments));

    }
    public static string CallCMD(string _command, string _arguments){
      System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(_command, _arguments);
      psi.CreateNoWindow = true;
      psi.RedirectStandardOutput = true;
      psi.UseShellExecute = false;
      System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
      return(p.StandardOutput.ReadToEnd());
    }
}

特别需要注意的是:

命令参数是 arguments 内不能有多余空格,因为每个空格都会被识别为分割;
还要注意加一层转义,假执行命令为 EchoHi.exe Mr.\"Tree\" (Tree加了双引号)时,定义就应该为

string arguments = "\\\"Mr.Cmd\\\"";

此后编译运行即可。

4. 参考

[1] https://blog.csdn.net/qq_42063091/article/details/82418630

到此这篇关于C#调用Python程序传参数获得返回值的文章就介绍到这了,更多相关C#调用Python获得返回值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在VS2017中用C#调用python脚本的实现

    情景是这样的:在C#中调用python脚本进行post请求,python脚本中使用了requests包. Python的开发环境我们有比较多的选择,pycharm.sublime text等等.但是作为.net平台的Python语言ironPython,可以和C#交互,让编程更活泛. ironPython本身其实就是一个python的开发环境,我的电脑上还装有python2.7和pycharm,开始的时候使用pycharm写的,本来的想法是用VS直接调用就可以了.但是后来才明白这三者的关系. p

  • C#调用Python的URL接口的示例

    VS2013的简单WInForm控件,通过WebRequest,WebResponse来访问,接收: private void btn_interface_Click(object sender, EventArgs e) { string url = "http://127.0.0.1:5000"; WebRequest wRequest = WebRequest.Create(url); wRequest.Method = "GET"; wRequest.Con

  • 详解Python 调用C# dll库最简方法

    1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应的根目录下查看有没有pythonnet这个文件夹. 2.首先要特别注意,你安装使用的Python的版本是对应x64还是x32的,python只能调用对应64位或32位的dll,可以右击启动项目的属性,修改并重新生成. 特别注意:启动项目和你的目标库不一样,前者输出类型是windows应用或是控制台,

  • C#调用python.exe使用arcpy方式

    背景 环境:ArcGis10.2.2.C#开发程序一直以来以调用Desktop的python环境(32位)来做数据处理分析.但是数据量大时,出现了内存资源不够的情况.因此决定换成使用64位python环境. 遇到问题 C#通过Process.Start()去调用64位python.exe,在Debug模式下毫无问题,但是直接运行exe就报错Process finished with exit code -1073741819 (0xC0000005).指向异常. 分析问题 后来发现是由于arcp

  • C#调用python脚本的方法步骤(2种)

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对的是python脚本中包含第三方模块的情况.不管哪种方式,首先都需要安装IronPython.我是通过vs2017的工具->NuGet包管理器->管理解决方案的NuGet包,搜索IronPython包安装,也可以在官网下载安装包自行安装后添加引用即可. 方式一:适用于python脚本中不包含第三方

  • C#调用python文件执行

    我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意 我用的是Visual studion 2017,python组件下载地址:http://ironpython.codeplex.com/releases/view/ 下载的版本是2.7,下载安装完之后记得引入安装路径下的以下三个dll (1)首先先说一个简单的功能,在c#代码中执行python字符串,内容如下: (2)c#调用python文件: 在当前目录下新建一个后缀名为py的文件,文件名为AmoutDis

  • C#调用Python模块的方法

    当下,C#与Python都是比较热门的计算机编程语言,他们各有优缺点,如果能让他们互相配合工作,那是多么美好的事情,今天我来讲解一下如何利用C#来调用Python. 如果让C#支持调用Python模块,我们首先需要安装一些扩展,这里推荐使用IronPython库. 第一步,我们需要下载IronPython库的安装包,这里请大家移步官网http://ironpython.codeplex.com/,下载并安装相关库文件. 第二步,我们新建一个C#控制台测试项目,并将IronPython安装目录中的

  • Python调用C# Com dll组件实战教程

    之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypto库AES也只有这四种模式,进而Python下无法实现C# AES Rijndael类加密效果了. 类似于这种C# 能实现的功能而在Python下实现不了的,搜集资料有两种解决方案,第一种方式,使用IronPython 直接调用C# dll文件,教程网上很多,不在赘述了,这种方式有个缺点,用的是ir

  • C#调用Python脚本的简单示例

    IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Hugunin所发起,是一个开源的项目,基于微软的 DLR引擎.IronPython的在CodePlex上的主页:http://ironpython.codeplex.com/ 使用场景: 如果你的小伙伴会写Python脚本,而且已经实现大部分项目的功能不需要再用C# 实现.现在缺少窗体,此时Python+C#的组合就可以完美的结局问题啦! 示例: 借由IronPython,就可以利用.NET执行存储在P

  • C#调用Python程序传参数获得返回值

    目录 说明 1. Python 脚本 2. 打包成Windows可执行文件 3. C# 程序 4. 参考 说明 C# 调用 Python 程序有多种方式,本篇用的是第 4 种: nuget的ironPython: 用 c/c++ 调用python,再封装成库文件,c# 调用: c# 命令行调用.py文件执行: python 程序制作成 .exe 可执行文件,c# 使用命令行进行传参取返回值. 1. Python 脚本 先建个测试脚本 d://Test/EchoHi.py 代码如下: import

  • Python生成器传参数及返回值原理解析

    一.生成器简介 在python中,带yield的方法不再是普通方法,而是生成器,它的执行顺序不同与普通方法. 普通方法的执行是从头到尾,最后return返回,或者没有返回值 生成器是到yield就返回yield之后的值,然后阻塞,等待next()/send()继续调起生成器 二.next()/send()的异同: next()/send()都可以调起生成器 next()只能调起生成器返回值,send()还可以对生成器进行传参数,与正常的理解不同,yield表达式左侧的值是send()方法传进来的

  • asp.net利用Ajax和Jquery在前台向后台传参数并返回值的实例

    1>前台 首先需要 Jquer的包 复制代码 代码如下: <script src="js/jquery-1.9.1.js" type="text/javascript"></script> 下面是     <script type="text/javascript"> $(function () { $('#txtUserName').blur(function () { var username = $

  • Jmeter通过OS进程取样器调用Python脚本实现参数互传

    1. Python中 sys.argv的用法解释:sys.argv可以让python脚本从程序外部获取参数,sys.argv是一个列表,可用[]提取其中的元素,其第一个元素是程序本身,随后才依次是外部给予的参数,可以接受多个参数,每个参数用空格隔开即可. '''该脚本用于jmeter的OS进程提取器的调用''' import hashlib import sys import time   parameter = sys.argv # print(parameter, type(paramete

  • Python学习笔记之函数的参数和返回值的使用

    01.函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以相互结合,共有四种: 无参数 无返回值 无参数 有返回值 有参数 无返回值 有参数 有返回值 定义函数时候,是否接收参数,或者时候返回结果,是根据实际功能需求决定的. 如果函数内部处理的数据不确定,就可以将外界的数据以参数形式传递到函数内部. 如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值. 02.函数的返回值-进阶 在程序开发中,有时候,会希望一个函数执行结束后,告诉调用者一个结果,以便调用者针

  • Python 函数用法简单示例【定义、参数、返回值、函数嵌套】

    本文实例讲述了Python 函数用法.分享给大家供大家参考,具体如下: demo.py(函数定义): # say_hello() # 不能在定义函数之前调用函数 # Python 解释器知道下方定义了一个函数 def say_hello(): """函数的说明文档""" print("hello 1") print("hello 2") print("hello 3") print(&q

  • 总结Java调用Python程序方法

    如何使用Java调用Python程序 本文为大家介绍如何java调用python方法,供大家参考. 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的python脚本呢,一共有三种方法可以实现,具体方法分别为大家介绍: 1. 在java类中直接执行python语句 此方法需要引用org.python包,需要下载Jpython.在这里先介绍一下Jpython.下面引入百科的解释: Jython是一种完整的语言,而不是一个J

  • Java调用Python脚本传递数据并返回计算结果

    需求:最近在使用基于Java编写的Cloudsim 4.0云仿真平台进行虚拟机动态迁移实验,由于中间有需要用到深度强化学习算法,因此需要将集群的状态表示为二维数组,比如物理机的计算能力Mips,RAM,带宽等等.希望将这样的二维数组传入到带torch等第三方库的Python脚本进行深度强化学习训练,所以就有二维int数组的传入,和从Python计算后的结果返回读取这个需求 一.实现思路:将Java中的data结构化为字符串,以命令行参数的形式传入Python中 目前有几种Java调用Python

  • 详解如何在Java中调用Python程序

    Java中调用Python程序 1.新建一个Maven工程,导入如下依赖 <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version> </dependency> 2.在java中直接执行python代码片段 import org.python.util

  • Jmeter调用Python脚本实现参数互相传递的实现

    接口性能测试时,接口请求参数是根据一定的规则拼接后进行MD5加密后再进行传参,因此借助于python脚本实现,则可以有效提升测试效率. 1.分析参数加密规则:NonceStr:时间戳 + 一个小于 1000 的随机数: Sign:"UserID=" + UserID+ "&" + "NonceStr=" + NonceStr + "固定的字符串": 其中UserID是上千个不同的数据已进行CSV文件参数化处理: 2.编

随机推荐