C#程序如何调用Python程序?

jmyz_0455 2015-05-20 09:58:54
我的项目中有一个用C#写的分析软件和一个用Python写的爬取软件。
我需要在C#程序中调用Python程序,其实操作也很简单。
分析器开启时把爬取器开启,分析器关闭时将爬取器关闭,不需带什么参数不需传值。
网上搜到C#调用Python的方法有俩,一是打包Python为exe文件被C#直接调用
二是在C#中安装IronPython解析器动态调用。
也考虑过planC用批处理,可我没接触过感觉不能实现分析器关闭时关闭爬取器。
考虑到比起方法二,方法一不需要用户在自己的电脑上配置Python环境,
我是学生,Python、C#都是初学,怕方法二略复杂会有很多未预知的问题要解决。
毕竟我爬取器中import了os、sys、url lib、urllib2、cookie lib、base64、codecs、re、hash lib、json、rsa、binascii、time、socket、random、mysqldb模块。

因此决定用方法一,现在Python已打包好,放在任何一台电脑上都可双击exe运行。
可是C#中就是调用出错,一运行就秒退,调用代码如下:(按网上教程融会贯通的)
class ControlPython
{
public void startexe()
{
Process usepy = new Process();
string path = "\"" + System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
+ "\\pyproject.exe" + "\"";
usepy.StartInfo.FileName = @"python";
usepy.StartInfo.Arguments = path;
usepy.StartInfo.UseShellExecute = false;
usepy.StartInfo.RedirectStandardOutput = true;
usepy.StartInfo.RedirectStandardInput = true;
usepy.StartInfo.RedirectStandardError = true;
usepy.StartInfo.CreateNoWindow = false;
usepy.OutputDataReceived += (sender, args) => Console.WriteLine("received output: {0}", args.Data);
usepy.Start();
sepy.BeginOutputReadLine();
Console.ReadLine();
}
}

请问这问题可以怎么解决?对于秒退,有没有办法查看输出了什么错误信息?
要是用方法二,感觉要很多地方改动,可否直接指点下我可以怎么弄?
其实我也不知道是哪里出了问题(C# or Py ?),但是打包好的exe直接双击能用。
网上对于C#调用Python的资料少之又少,多数论坛的py版块都很冷清...实在是黔驴技穷了。
运行环境Windows7 Python版本2.7.9 学校的deadline已到...跪下来问了。

最后感谢看完的大神们,能回答的话感激不尽呐~
...全文
3077 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Metz 2016-04-20
  • 打赏
  • 举报
回复
引用 3楼不得闲 的回复:
.net自带一个IPython是专门.net用的嘛,相互之间可以之间访问哈
不得闲 2015-05-27
  • 打赏
  • 举报
回复
.net自带一个IPython是专门.net用的嘛,相互之间可以之间访问哈
panghuhu250 2015-05-24
  • 打赏
  • 举报
回复
都变成exe, 运行也没问题了, 就和python没太大关系了, 到C#区问怎样调用exe更合适.

usepy.StartInfo.FileName = @"python";
usepy.StartInfo.Arguments = path;
不懂c#, 感觉这两句的意思是, 运行"python \path\to\pyproject.exe"(因为path是参数, python是(要运行的)文件名). 是不是应该改成(只是大概意思, 具体语法你自己来, 我就不懂上面的@是怎么会事):

usepy.StartInfo.FileName = path;
usepy.StartInfo.Arguments = ""; //不知道空字符串是否表示没有参数
  • 打赏
  • 举报
回复
C#不懂 目测是只要shell方式启动批处理就可以了吧 你写个批处理启动下py的exe试试 如果没问题 调用API启动exe就不该有问题

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧