我试图通过以下方式从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#代码可能存在的问题,还是需要在服务器上设置任何权限?
提前致谢,
答案 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)与其他人混淆了,但这些提示可能仍然对您有帮助。