从C#执行Python脚本

时间:2013-04-10 08:42:49

标签: 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#代码可能存在的问题,还是需要在服务器上设置任何权限?

提前致谢,

1 个答案:

答案 0 :(得分:2)

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";
祝你好运。

修改

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