C#调用Python程序传参数获得返回值
作者:小龙狗 发布时间:2023-10-11 06:49:52
说明
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
来源:https://blog.csdn.net/ShyLoneGirl/article/details/114171320


猜你喜欢
- 本文实例为大家分享了vue实现轮播图帧率播放的具体代码,供大家参考,具体内容如下需求传入一个数组,数组中放的是目录名称,通过本目录名称,读取
- 创建项目Location:新项目文件夹GOROOT:go 安装根目录Proxy:https://goproxy.io,direct重要:ht
- MySQL时间盲注五种延时方法 (PWNHUB 非预期解)延时注入函数五种:sleep(),benchmark(t,exp),笛卡尔积,GE
- django静态文件配置原理静态文件配置就是为了让用户请求时django服务器能找到静态文件返回。首先要理解几个概念:媒体文件:用户上传的文
- Form表单验证:js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等。完整代码如下:
- 使用了telnetlib模块,首先登录到交换机,列出并获取配置文件的名称,然后通过tftp协议将配置文件传输到文件服务器上,为避免配置文件覆
- 数字运算=:用于给变量赋值type(x):查看数据所属类型isinstance(x, A_tuple):判断数据是否为预期类型+:两个数相加
- 什么是DLL文件?DLL文件为动态链接库(英语: Dynamic-link library, 缩写为DLL)它是微软公司在微软视窗操作系统中
- 引言事情是这样的,直接开讲面试官:npm run xxx的时候,发生了什么?讲的越详细越好。我(心想,简单啊): 首先,DNS 解析,将域名
- 一、什么是v-bind指令v-bind指令用于响应更新HTML特性,允许将一个或多个属性动态绑定到表达式。v-bind是应用在动态属性上面的
- canny边缘检测原理canny边缘检测共有5部分组成,下边我会分别来介绍。1 高斯模糊(略)2 计算梯度幅值和方向。可选用的模板:sobl
- 最近在看红楼梦,看的诗词多了,时不时的也想来一句...这几天刚看看到了underscore.js的防抖和节流的部分,正好又去复习了这部分内容
- 前言:MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句
- OS ( Operating System 操作系统 ) 操作系统模块;它是属于python的标准库,也就是Python自带的库;它常用于处
- tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍
- 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下:一、问题描述:如果用户输入的数据在未经处理的情况下插入到一条S
- MooTools 1.2的整理排序类Sortables原文地址:30 Days of Mootools 1.2 Tutorials - Da
- 1.查询高于平均价格的商品名称:SELECT item_name FROM ebsp.product_mark
- 在处理Python代码字符串的时候,我们常会遇到要去除空格的情况,所以就总结了多种方法供大家参考。1、strip()方法去除字符串开头或者结
- 最近被告知,MySQL主从数据库的数据不一致,猜测备库在同步过程中出现了问题,于是,登上备库,使用 mysql> show slave