从Visual Studio运行Common Lisp的Shell命令及C#与Common Lisp互操作问询
C#与Common Lisp互操作性及从VS运行Lisp命令的解决方案
我来给你梳理几个更高效的方案,既解决C#调用Common Lisp程序的互操作需求,也能让你在Visual Studio里更方便地运行Lisp命令:
一、跳过cmd直接启动clisp进程(更简洁高效)
你当前通过cmd间接启动clisp的方式没问题,但其实可以直接调用clisp.exe进程,减少一层中转,代码更简洁,也更容易控制输入输出。
以下是优化后的C#代码示例:
Process clispProcess = new Process(); // 注意:如果clisp不在系统PATH里,要写完整路径,比如 @"C:\Program Files\clisp-2.49\clisp.exe" clispProcess.StartInfo.FileName = "clisp.exe"; clispProcess.StartInfo.RedirectStandardInput = true; clispProcess.StartInfo.RedirectStandardOutput = true; clispProcess.StartInfo.RedirectStandardError = true; // 建议加上错误输出捕获 clispProcess.StartInfo.CreateNoWindow = true; clispProcess.StartInfo.UseShellExecute = false; // 启动进程 clispProcess.Start(); // 方式1:向clisp输入Lisp代码并执行 clispProcess.StandardInput.WriteLine("(print \"Hello from C#!\")"); clispProcess.StandardInput.WriteLine("(quit)"); // 记得退出clisp,避免进程挂起 // 读取输出结果 string output = clispProcess.StandardOutput.ReadToEnd(); string error = clispProcess.StandardError.ReadToEnd(); clispProcess.WaitForExit(); Console.WriteLine("Clisp输出:"); Console.WriteLine(output); if (!string.IsNullOrEmpty(error)) { Console.WriteLine("错误信息:"); Console.WriteLine(error); }
二、给Common Lisp程序传递参数的两种常用方式
方式1:运行外部Lisp脚本文件并传参
如果你的逻辑写在.lisp脚本里,可以直接在启动clisp时指定脚本路径和参数:
// 假设脚本文件是my-script.lisp,需要传递两个参数"arg1"和"arg2" clispProcess.StartInfo.Arguments = @"my-script.lisp arg1 arg2";
在Lisp脚本里可以通过*args*变量获取这些参数:
(print (format nil "收到参数:~a" *args*)) (quit)
方式2:直接通过命令行传递Lisp表达式
如果只是执行简单的逻辑,不需要单独的脚本文件,可以用-x参数直接执行表达式:
// 执行加法运算,同时传递参数(比如把C#里的变量传给Lisp) int num1 = 5; int num2 = 3; clispProcess.StartInfo.Arguments = $"-x \"(print (+ {num1} {num2}))\"";
三、在Visual Studio里直接运行Common Lisp命令
如果你想在VS里快速运行Lisp脚本或命令,可以添加外部工具:
- 打开Visual Studio,点击顶部菜单的工具 -> 外部工具
- 点击添加,填写以下信息:
- 标题:Run Clisp Script
- 命令:填写clisp.exe的完整路径(比如
C:\Program Files\clisp-2.49\clisp.exe) - 参数:
$(ItemPath)(表示当前打开的Lisp文件路径) - 初始目录:
$(ItemDir) - 勾选使用输出窗口(这样运行结果会显示在VS的输出窗口里)
- 保存后,下次右键点击Lisp文件,就能在外部工具里找到这个选项,直接运行脚本啦!
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

