process.Start()在C#中不起作用,无法调用python脚本
对不起,如果这是显而易见的,我是C#的新手。 我正在开发一个程序,该程序运行一个python脚本来在线检查某些内容,然后将其写回一个文件,C#读取并放入一个表单中。如果我同时手动运行这两个脚本,一切都会正常工作,但我确实希望从C#程序启动脚本 以下是启动python脚本的函数:process.Start()在C#中不起作用,无法调用python脚本,c#,python,process,C#,Python,Process,对不起,如果这是显而易见的,我是C#的新手。 我正在开发一个程序,该程序运行一个python脚本来在线检查某些内容,然后将其写回一个文件,C#读取并放入一个表单中。如果我同时手动运行这两个脚本,一切都会正常工作,但我确实希望从C#程序启动脚本 以下是启动python脚本的函数: private void RunPython() { Process p = new Process(); ProcessStartInfo startInfo = new Process
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();
}
我试着在不隐藏窗口的情况下运行它,它只是在“path”目录中显示一个空的cmd行。它从不运行python脚本吗?看起来不是这样,但它也可能正在运行它并立即关闭它。我不知道
我需要它在C#程序运行期间保持打开状态,因此,如果问题是它在RunPython()方法返回时退出,是否有其他方法可以解决这个问题
谢谢 如果要在命令行中使用cmd.exe的参数运行程序,则需要
/c
标志。或者,您可以使用/k
,但这样可以使命令进程保持运行,而这可能是您不希望的
/c执行字符串指定的命令,然后停止
所以它的用法是cmd.exe/c[string]
尝试将参数行更改为:
startInfo.Arguments = "/c \"python " + path + "\\foo.py\"";
有关运行cmd.exe和处理命令的
string
部分中的引号的更多信息,请参见此处:您是否可以发布foo.py
?它大约有500行,当我从命令行手动启动它时,它可以工作。如果我分别启动两个程序,整个过程都会正常工作,我只是想找到一种只启动一个的方法。我尝试了两个“\“python”+path+“\\foo.py\”代码>和“/c\“python”+path+“\\foo.py\”代码>和两者都不起作用。当我使窗口样式可见时,它仍然只是在path目录中显示一个空行,但没有显示它启动了python文件.Wait。这起作用了。我给出的路径还有另一个问题。这就回答了问题。非常感谢。下面是工作代码:startInfo.Arguments=“/c\”python foo.py\”代码>@Zaya很抱歉,我用引号写出了命令参数,但忘记了标志本身。很高兴你找到了答案,我编辑了这个问题,所以现在应该是正确的。你能发布一个python脚本args的示例吗?@Learner你应该能够将它们添加到foo.py
和关闭python参数字符串的\“
之间的参数字符串中。