2016-07-26 190 views
0

希望你能帮助我。我正在用MonoDevelop编写Raspberry Pi。启动后立即停止进程

我想用C#执行一个python脚本并从中读取它。

class Program 
{ 
    public static void Main(string[] args) 
    { 
     Process p = new Process(); 
     p.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); 
     p.StartInfo.FileName = "sudo"; 
     p.StartInfo.Arguments = "python gpio.py"; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.CreateNoWindow = true; 
     p.StartInfo.RedirectStandardOutput = true; 

     p.Start(); 
     p.BeginOutputReadLine(); 
     p.WaitForExit(); 
    } 

    private static void OutputHandler(Object sender, DataReceivedEventArgs args) 
    { 
     Console.WriteLine(args.Data); 
    } 
} 

尽管调试我可以看到,该过程已退出 Click for image

但在任务管理我可以看到,该过程仍在运行。 此外脚本控制gpio引脚。脚本控制引脚(Led开/关),即使“Process已退出”。但我没有从redirectOutput获取任何内容。

为什么程序在启动后立即退出(脚本有一段时间是真的,它不应该停止)?这是执行脚本的正确方法吗?
如果我从终端执行Python脚本,它工作正常。它不应该是脚本的错误。 如果我开始一个过程,例如FileName“libreoffice”,它也可以工作。

该脚本位于“/ bin/Debug /”(文件夹)中的项目文件夹中 执行权限是为任何人设置的。

感谢,
问候

+1

我认为问题是因为s​​udo,试图运行已经sudo'ed的C#程序,然后使用python作为文件名,并使用gpio.py作为参数。但是最后一个推荐,而不是使用Python来直接控制gpio的使用C#,看看这个:https://github.com/gusmanb/BCM2835Managed – Gusman

回答

0

正如@Gusman说,这个问题是sudo的。正如我建议我现在使用DLL来访问GPIO引脚。即使树莓派没有完全支持。