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

提前致谢,

从这里错误代码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)与其他人混淆了,但这些提示可能仍然对您有所帮助。