4

我正在尝试通过以下方式从 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# 代码可能是什么问题,或者我需要在服务器上设置任何权限吗?

提前致谢,

4

1 回答 1

2

这里错误代码 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),但这些提示可能仍然对您有所帮助。

于 2013-04-12T20:50:13.340 回答