class Program
{
///
/// 实时获取python输出
///
///
///
static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
{
Console.WriteLine(e.Data);
}
}
static void Main(string[] args)
{
Process p = new Process();
string path = @" .\train.py ";// 获得python文件的绝对路径(将文件放在c#的debug文件夹中可以这样操作)
p.StartInfo.FileName = @"python.exe";//没有配环境变量的话,写python.exe的绝对路径。如果配了,直接写"python.exe"即可
string sArguments = path;
//foreach (string sigstr in teps)
//{
// sArguments += " " + sigstr;//传递参数
//}
//sArguments += " ";
p.StartInfo.Arguments = sArguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.ErrorDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
try
{
p.Start(); //启动程序
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit(); //等待程序执行完退出进程
}
catch (Exception e)
{
Console.WriteLine(e.Message + e.StackTrace);
}
//关闭进程
p.Kill();
p.Close();
}
}
1、Python报ImportError: No module named 'xxx’错误
解决方案:
import sys
sys.path.append(’需要引用模块的地址')
# sys.path.append("..") # 这代表添加当前路径的上一级目录
2、Python没有进行实时输出结果
原因:一般会先将字符送到缓冲区,然后再打印。但由于缓冲区没满,不会打印。就需要采取一些手段。如每次打印后强行刷新缓冲区。
解决方案:在Print函数后面增加sys.stdout.flush()