【发布时间】:2018-02-16 18:33:57
【问题描述】:
我有一个使用 tensorflow 库的 python 项目。我必须运行这个 python 脚本,它从文件 input.txt 获取输入,并使用 cmd 通过 WPF 应用程序将结果输出到 output.txt。我通过简单地使用 cmd 在 WPF 项目外部运行脚本来单独测试脚本。它工作正常,output.txt 会根据结果进行更新。
我使用以下代码从 WPF 项目执行 python 脚本:
string cmd = @"C:\Users\mails\Documents\example_tagging.py";
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = @"C:\Users\mails\AppData\Local\Programs\Python\Python35\python3.exe";
start.Arguments = string.Format("{0}", cmd);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
string results = reader.ReadToEnd();
MessageBox.Show(result.ToString()); //This outputs OK
}
}
代码运行良好。 cmd打开并开始执行python程序。但是突然之间,python.exe 显示了一些关于错误文件属性的错误并关闭。(我无法读取错误,因为它会在一秒钟内关闭)。这实际上不应该发生,因为相同的 input.txt 工作正常并在 cmd 上的 WPF 项目之外运行时会创建一个 output.txt。
为什么会这样?如何解决?
【问题讨论】:
-
我在 python 程序的代码的第一行打印了“tensorflow running”。当我运行此代码时,第一条消息将打印在控制台中。所以python脚本是“启动的”。但是为什么它没有完成执行呢?这显然在外面工作得很好。
-
要记住的一点是,许多程序在单独的流
StandardError上输出错误。仅仅因为您在StandardOutput上没有看到它们并不意味着它们不存在。 (不知道这是否也适用于您的情况)。这里可能相关的一件事是工作目录。您对 input.txt 和 output.txt 使用相对路径吗? (如果是,请相应设置start.WorkingDirectory)
标签: c# wpf python-3.x cmd