C# 調用 python3
阿新 • • 發佈:2018-08-04
inf exe tro csdn string create col roc static
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