2017-05-31 35 views
2

对不起,如果这是明显的事情,我是超新的C#。 我正在研究一个运行python脚本的程序来检查在线内容,然后将它写回到C#读取并放在表单上的文件。一切工作,如果我手动同时运行它们,但我真的想从C#程序启动脚本。process.Start()不能在C#中调用python脚本

这里是一个应该启动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()方法返回时退出,是否有一些不同的方法可以解决这个问题?

谢谢!

+0

你可以发布'foo.py'吗? – stybl

+0

这就像500条线,当我从命令行手动启动它时它就起作用。如果我单独启动这两个程序,整个工作,我只是想找到一种方法,只需要启动一个 – Zaya

回答

2

如果要使用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

+0

我同时尝试'“\”python“+ path +”\\ foo.py \“”; '和'“/ c \”python“+ path +”\\ foo.py \“”;'并且都不起作用。当我让窗口样式可见时,它仍然在路径目录中显示一个空行,但没有指示它启动了python文件。 – Zaya

+0

等一下。这工作。我给出的路径还有另一个问题。这回答了这个问题。谢谢!这里的工作代码: 'startInfo.Arguments =“/ c \”python foo.py \“”;' – Zaya

+0

@ Zaya对不起,我用引号写出了命令参数,但忘记了标志本身。很高兴你知道了,我编辑了这个问题,所以现在应该是正确的。 –