【问题标题】:process.Start() not working in C# to call python scriptprocess.Start() 在 C# 中无法调用 python 脚本
【发布时间】:2017-05-31 20:42:41
【问题描述】:

对不起,如果这是显而易见的事情,我是 C# 的超级新手。 我正在开发一个程序,该程序运行 python 脚本以在线检查某些内容,然后将其写回 C# 读取并放入表单的文件。如果我同时手动运行它们,一切正常,但我真的想从 C# 程序启动脚本。

下面是应该启动 python 脚本的函数:

private void RunPython()
{
        Process p = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "python " + path + "\\foo.py";
        p.StartInfo = startInfo;
        p.Start();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
        // get things set up... etc.
        RunPython();
}

我试过在不隐藏窗口的情况下运行它,它只是在“路径”目录中显示一个空的 cmd 行。它从不运行python脚本吗?它看起来不像,但它也可能正在运行它并立即关闭它。我说不出来。

我需要它在 C# 程序运行期间保持打开状态,所以如果问题是它在 RunPython() 方法返回时退出,我有什么不同的方法可以解决这个问题吗?

谢谢!!

【问题讨论】:

  • 你能发帖foo.py吗?
  • 好像500行,当我从命令行手动启动它时它工作。如果我分别启动两个程序,整个事情就可以了,我只是想找到一种只需要启动一个的方法

标签: c# python process


【解决方案1】:

如果您想在命令行中使用 cmd.exe 的参数运行程序,您需要 /c 标志。或者,您可以使用/k,但这会保持您可能不想要的命令进程运行。

/c 执行 String 指定的命令,然后停止。

所以它的用法是cmd.exe /c [string]

尝试将参数行更改为:

startInfo.Arguments = "/c \"python " + path + "\\foo.py\"";

有关运行 cmd.exe 和处理命令的 string 部分中的引号的更多信息,请参见此处:https://technet.microsoft.com/en-us/library/cc771320(v=ws.11).aspx

【讨论】:

  • 我尝试了"\"python " + path + "\\foo.py\"";"/c \"python " + path + "\\foo.py\""; 都没有成功。当我使窗口样式可见时,它仍然只在路径目录中显示一个空行,但没有任何迹象表明它启动了 python 文件。
  • 等等。这行得通。我给它的路径还有另一个问题。这回答了这个问题。谢谢!这是工作代码:startInfo.Arguments = "/c \"python foo.py\"";
  • @Zaya 抱歉,我用引号写出了命令参数,但忘记了标志本身。很高兴你想通了,我编辑了这个问题,所以现在应该是正确的。
  • 你能发布一个带有python脚本参数的例子吗?
  • @Learner 您应该能够将它们添加到foo.py 和关闭python 参数字符串的\" 之间的参数字符串中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2021-08-05
  • 2012-06-04
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多