c# - 从 C# 执行 Python 脚本

标签 c# python

我正在尝试通过以下方式从 C# 执行 python 脚本:

int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;

ProcessInfo = new ProcessStartInfo();
ProcessInfo.FileName = "C:\Python27\python.exe";
ProcessInfo.Arguments = "C:\generate.py book1.pdf";
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.RedirectStandardOutput = true;

Process = Process.Start(ProcessInfo);
Process.WaitForExit();
ExitCode = Process.ExitCode;
Process.Close();

当我在服务器上执行此操作时,我得到的 ExitCode 为 1。但相同的代码在本地运行良好。

此外,当我从 cmd 提示符运行此命令时,python 脚本执行时没有任何问题。

这个 python 脚本实际上用于将 PDF 页面转换为 SWF 文件,从页面中提取文本并使用各种开源创建 pdg 页面的缩略图。

任何人都可以帮助我了解上述 C# 代码可能存在的问题,或者我是否需要在服务器上设置任何权限?

提前致谢

最佳答案

来自 here错误代码 2 代表 ERROR_FILE_NOT_FOUND,因此您的路径/文件权限应该有问题。

首先你可以从 python 进程中读取 stdout 和 stderr,看看你是否从那里得到一些信息:

    ProcessInfo.RedirectStandardOutput = true;
    ProcessInfo.RedirectStandardError = true;
    // (...)
    Process.WaitForExit();
    string stderr = Process.StandardError.ReadToEnd();
    string stdout = Process.StandardOutput.ReadToEnd();
    Console.WriteLine("STDERR: " + stderr);
    Console.WriteLine("STDOUT: " + stdout);

WriteLine 可能不是呈现信息的最佳方式,因此请对其进行调整以更好地满足您的需求(记录该信息、将其写入临时文件等)。

此外,我几乎不知道如何使用 C# 进行编程,但是当我尝试编写类似于您的程序时,它给了我一个错误,因为路径没有转义。所以你也可以尝试把\换成\\:

ProcessInfo.FileName = "C:\\Python27\\python.exe";
ProcessInfo.Arguments = "C:\\generate.py book1.pdf";

祝你好运。

编辑

我刚刚注意到我将您的错误代码 (1) 与评论 (2) 中的其他人混淆了,但这些提示可能仍然对您有所帮助。

关于c# - 从 C# 执行 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921007/

相关文章:

java - c# 解压缩错误 使用不支持的压缩方法压缩存档条目

c# - 如何使用 jQuery AJAX 调用 void C# Web 方法?

c# - 为什么我不能在祖先类上使用 IComparable<T> 并比较子类?

c# - 使图片框透明,每个框与另一个角重叠?

python - Pandas Resample 上采样数据的最后日期/边缘

python - 无法使用 lxml 从 HTML 中提取值

python - Scipy LDL 分解返回意外结果

c# - 具有先前状态的状态模式 C#

python - Pandas Dataframe 如何合并列

python - json2html,Python : json data not converted to html