我正在尝试通过以下方式从 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/