【发布时间】:2025-05-23 01:20:02
【问题描述】:
希望你能帮助我。我正在使用 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
但在 TaskManager 中我可以看到,该进程仍在运行。 该脚本还控制 gpio 引脚。即使“进程已退出”,脚本也会控制引脚(LED 开/关)。但我没有从 redirectOutput 得到任何东西。
为什么进程启动后立即退出(脚本有一段时间是真的。它不应该停止)?这是执行脚本的正确方法吗?
如果我从终端执行 Python 脚本,它工作正常。这不应该是脚本错误。
如果我启动一个过程,例如文件名“libreoffice”,也可以。
脚本位于“/bin/Debug/”(文件夹)中的项目文件夹中 任何人都可以设置执行权限。
谢谢,
问候
【问题讨论】:
-
我认为问题是因为sudo,尝试运行已经sudo'ed的C#程序,然后使用python作为文件名和gpio.py作为参数。不过最后一个建议,不要直接用C#用Python来控制gpio的使用,看看这个:github.com/gusmanb/BCM2835Managed
标签: c# python linux process monodevelop