【C#】【语法】从C#通过代码启动Python脚本没有接收到参数
本来写的是这样:
ProcessStartInfo psi = new ProcessStartInfo { FileName = "cmd.exe", WorkingDirectory = FrmNewProject.GetFolderPath() + "\\SolverForEXE", RedirectStandardInput = true,//将标准输入流重定向,允许程序向cmd发送命令。 RedirectStandardOutput = true,//将标准输出流重定向,允许程序捕获cmd的输出。 RedirectStandardError = true,//将错误输出流重定向,允许程序捕获cmd的错误信息。 UseShellExecute = false,//禁用shell的使用,这是必需的,因为需要重定向输入/输出流。 CreateNoWindow = true,//启动进程时不创建新窗口,使其在后台运行。 Arguments = $"{general_file} {topo_file} {stream_file} {solution_file}" }; Process process = new Process { StartInfo = psi }; process.Start(); // 向cmd窗口发送命令 process.StandardInput.WriteLine("python Solver_test.py\n"); process.StandardInput.WriteLine("exit"); // 关闭cmd窗口
更正了参数格式:
Arguments = $"\"{general_file}\" \"{topo_info}\" \"{stream_info}\" \"{result_final}\""
- 当你传递参数给命令行时,参数可能包含空格。例如:路径
C:\Program Files\Some Folder
。 - 如果路径包含空格,命令行解释器会将其视为多个参数。为避免这种情况,需要用双引号将整个路径包裹起来。例如:
"C:\Program Files\Some Folder"
。 - 在C#中,我们用转义字符
\
在字符串内包含实际的双引号,在这里也就是:\" ,使得生成的命令行参数被正确包裹。例如:Arguments = $"\"{general_file}\" \"{topo_info}\" \"{stream_info}\" \"{result_final}\""
。
生成的 arguments
字符串是:
"C:\Path\To\General File.txt" "C:\Path\To\Topo File.txt" "C:\Path\To\Stream File.txt" "C:\Path\To\Result File.txt"
这里转义字符表示的双引号并不是什么针对参数的特殊符号,这里就是在一个普通的字符串里输出的普通的双引号,为的是保证双引号里的内容在作为命令行参数时的完整性和正确性。只不过在命令行执行命令或ProcessStartInfo
类启动进程时,这二者解析Arguments 这个字符串参数时,C:\Path\To\GeneralFile.txt C:\Path\To\TopoFile.txt C:\Path\To\StreamFile.txt C:\Path\To\ResultFile.txt 和 "C:\Path\To\General File.txt" "C:\Path\To\Topo File.txt" "C:\Path\To\Stream File.txt" "C:\Path\To\Result File.txt" 都能被正确解析,后者的参数不会多出一层双引号。
还有一个问题是:
代码中使用了process.StandardInput.WriteLine("python Solver_test.py\n");
来启动Python脚本。如果已经有了process.Start();,那么这行代码不是必需的,或者它可能会覆盖或冲突导致参数没有被正确传递。
删掉这行,就可以正常运行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)