C# 调用 python3
1.C# 调用python
本质上是使用命令行运行python
1.1 C# 使用命令行
program.cs
using System;
using System.Diagnostics;
using System.IO;
namespace test
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
string result = p.run_cmd("ping.exe", "8.8.8.8 -n 2");
Console.WriteLine(result);
Console.ReadKey();
}
public string run_cmd(string program, string cmd)
{
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = program;
start.Arguments = cmd;
start.UseShellExecute = false; // Do not use OS shell
start.CreateNoWindow = true; // We don't need new window
start.RedirectStandardOutput = true; // Any output, generated by application will be redirected back
start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions)
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
string result = process.StandardError.ReadToEnd();
if (result == null || result == "")
{
result = reader.ReadToEnd();
}
return result;
}
}
}
}
}
代码运行结果
- 调用run_cmd相当于执行了cmd命令,所以就有了使用命令行运行python脚本的方式
1.2. C# 调用 python3脚本
假设C盘根目录下有如下脚本 test1.py
import sys
def add(a,b):
return a+b
if __name__ == "__main__":
print(sys.argv[1])
print("hello python")
在 program.cs 中加入函数runPython,并修改main函数
static void Main(string[] args)
{
Program p = new Program();
//string result = p.run_cmd("ping.exe", "8.8.8.8 -n 2");
string result = p.runPython("C:\\test1.py", "\"Form C#:\"");
Console.WriteLine(result);
Console.ReadKey();
}
public string runPython(string filename, string cmd)
{
string cmd1 = string.Format("{0} {1}", filename, cmd);
return run_cmd("python.exe", cmd1);
}
代码运行结果
1.3 C# 调用python3内的函数
我们知道使用python -c可以直接执行python代码,所以合理构造语句就可以直接调用python脚本内的函数了:python -c "print('hello python')"。
若要调用脚本里的函数,常规写法为:
import sys
sys.path.append('c:\\')
import test1
print(test1.add(3,4))
缩成一行就是python -c "import sys;sys.path.append('c:\\');import test1;print(test1.add(3,4))"
在 program.cs 中加入函数runPyFunc,并修改main函数
static void Main(string[] args)
{
Program p = new Program();
//string result = p.run_cmd("ping.exe", "8.8.8.8 -n 2");
//string result = p.runPython("C:\\test.py", "\"Form C#:\"");
string result = p.runPyFunc(@"C:\\","test1","add","3,4");
Console.WriteLine(result);
Console.ReadKey();
}
public string runPyFunc(string path, string filename, string functionname, string parameter)
{
string cmd = string.Format("-c \"import sys;sys.path.append('{0}');import {1};print({1}.{2}({3}))\"", path, filename, functionname, parameter);
return run_cmd("python.exe", cmd);
}
运行就可以得到结果“7”了
C# 调用 python3的更多相关文章
- sublime COMMAND + B 调用 python3 运行
用sublime写了python3的代码,COMMAND + B运行调用 PYTHON3 我们先来新建一个sublime build system 然后自动打开了一个文本,清空并写入以下内容: { & ...
- notepad++调用python3中文乱码
使用notepad++,配置好快捷键调用python3,一切就绪,仿佛就差代码了,结果一使用, 中文乱码,一直没有好的解决办法. 最后只能在代码中增加一行重写向输出解决,示例如下: #!/usr/bi ...
- C++ 调用Python3
作为一种胶水语言,Python 能够很容易地调用 C . C++ 等语言,也能够通过其他语言调用 Python 的模块. Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 ...
- C++程序调用python3
今天想做一个简单的管理密码的小程序,由于最近了解了下Python,就想用Python来写.但是看了看Python的界面库用法有感觉有点麻烦,所以还不如直接使用MFC写写界面,关于csv的文件处理部分使 ...
- python2.7和python3共存
python2.7和python3共存 原本装了python,玩nodejs的时候需要node-gyp来编译依赖,无赖这货需要python2.5<v<3.0,那就弄两个版本吧 转载自 ht ...
- Linux下编译安装python3
Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装py ...
- Windows2012中Python2.7.11+Python3.4.4+Pycharm
下载软件包 Python2.7.11: https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi Python3.4.4: ...
- 超详细的 Linux CentOS 编译安装python3
前言: 安装完CentOS7后,执行#Python与#python -V,看到版本号是2.6,而且之前写的都是跑在python3.X上面的,3.X和2.X有很多不同,在这里我就不弊述两者之间的区别了新 ...
- 如何在命令行中让python2和python3同存
初学python,你可能同时安装了python2和3.在我们安装好python之后,我们会面临这样一个问题,在命令行输入"python",可能会出错,或者只能调用其中一个版本,py ...
随机推荐
- 最新 网易java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易.京东.去哪儿等10家互联网公司的校招Offer,因为某些自身原因最终选择了网易.6.7月主要是做系统复习.项目复盘.LeetCode与牛客刷题 ...
- idea多级目录与单级目录切换
- POJ2449 【第k短路/A*】
题目链接:http://poj.org/problem?id=2449 题目大意: 给出n个点,m条有向边,最后一行给出起点到终点的第k短路.求长度. 题解思路: 这是我第一道第k短路题以及A*算法的 ...
- 如何用IDEA创建springboot(maven)并且整合mybatis连接mysql数据库和遇到的问题
一.New->Project 二.点击next 三.在Group栏输入组织名,Artifact就是项目名.选择需要的java版本,点击next 四.添加需要的依赖 在这里我们也可以添加sql方面 ...
- 经典排序算法及总结(python实现)
目录 1.排序的基本概念和分类 排序的稳定性: 内排序和外排序 影响内排序算法性能的三个因素: 根据排序过程中借助的主要操作,可把内排序分为: 按照算法复杂度可分为两类: 2.冒泡排序 BubbleS ...
- list列表
list列表 list:一个有序的集合 创建列表 语法格式: 列表名 = [元素1, 元素2, 元素3…….,元素n] 注:列表中的元素⽤逗号隔开. 注:列表⾥⾯的元素可以是不同类型的数据. 列表元素 ...
- spring中使用动态代理(AOP)
spring是整合了BGLIB和JDK两种动态代理 示例:使用CGLIB代理 public class MyCar { private String color = "blue"; ...
- MySql数据库 优化
MySQL数据库优化方案 Mysql的优化,大体可以分为三部分:索引的优化,sql慢查询的优化,表的优化. 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更 ...
- numix Docky
今天我们介绍这款主题适用于 Docky 启动器的 numix 主题,关于 Docky 大家已经应该很熟悉了,一款类似 Mac 底部软件停放的快捷启动码头.如图: 这款主题是 Docky 的主题,如果你 ...
- Linq to sql之left join运用示例
示例一: var l= from a in cardsBll.GetCards() join b in usersBll.GetAllUsers() on a.CardSn equals b.Card ...