首页 > 编程语言 >从C#通过代码启动Python脚本没有接收到参数

从C#通过代码启动Python脚本没有接收到参数

时间:2024-05-16 09:20:05浏览次数:19  
标签:process 双引号 C# cmd Python 参数 file 接收

本来写的是这样:

            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#中,字符串本身内部也使用双引号来定义。所以当你需要在字符串内包含一个实际的双引号字符时,你需要使用转义字符 \ 来实现。在这里也就是:\"

在C#中使用双引号(")包围路径或参数是一种常见的做法,特别是当路径或参数可能包含空格时。在编程和命令行语境中,空格通常被用作不同命令或参数的分隔符。如果一个参数内部包含空格,没有用双引号括起来的话,程序可能会错误地将其解释为多个参数。

这里的关键点是,双引号在传递到命令行之前是作为字符串的一部分被解释的,不会在C#中定义的这些参数外面再额外加上一个双引号。而是直接将每个参数值用一对双引号包裹,保证它们在作为命令行参数时的完整性和正确性。

当双引号传递到命令行之后,它们的角色从C#中的字符串分隔符转变为命令行参数的定界符。这意味着在C#代码中,双引号是用来确保字符串中的双引号被识别和处理为字符串的一部分,而当这些双引号和它们包围的内容被传递到命令行时,它们的功能转换为确保命令行解释器将被双引号包围的内容视为一个单独的参数。

 

还有一个问题是:

代码中使用了process.StandardInput.WriteLine("python Solver_test.py\n");来启动Python脚本。如果已经有了process.Start();,那么这行代码不是必需的,或者它可能会覆盖或冲突导致参数没有被正确传递。

删掉这行,就可以正常运行了。

标签:process,双引号,C#,cmd,Python,参数,file,接收
From: https://www.cnblogs.com/ban-boi-making-dinner/p/18195277

相关文章

  • ModbusRTU从站扫描工具 python实现
    扫描指定串口下,有哪些modbusRTU服务端[1-247]frompymodbus.clientimportModbusSerialClientasModbusClientfrompymodbus.exceptionsimportModbusIOException,ConnectionException,NoSuchSlaveExceptionimporttimedefread_holding_registers(client,slave_addres......
  • DevExpress WinForms中文教程 - HTML & CSS支持的实战应用(一)
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!在这篇文章中,我们将概述使用DevExpressWinFormsH......
  • 使用命令登录harbor报错authentication required解决方法
    使用命令在终端登录harbor报错报错信息如下#dockerlogin192.168.3.61Authenticatingwithexistingcredentials...StoredcredentialsinvalidorexpiredUsername(admin):adminPassword:Errorresponsefromdaemon:Get"http://192.168.3.61/v2/":unauthorized:......
  • IC设计企业如何实现安全便捷的芯片云桌面跨网摆渡?
    IC设计企业,主要专注于集成电路的设计。这些企业通常包括集成电路、二极管、三极管和特殊电子元件等产品的设计和生产。IC设计企业在其运营和产品设计过程中,会涉及和产生多种文件,如:项目需求文档:这是项目启动的基础,详细描述了项目的目标、功能需求、性能指标等。设计规格书(Design......
  • 我们的服务涵盖了互联网连接、专线服务、云计算和数据中心(IDC)等多个方面
    我们致力于通过丰富的海外自有与合作资源,为互联网企业提供量身定制的互联网、专线及云、IDC等基础设施服务,以满足客户在全球范围内部署业务的需求。我们的服务涵盖了互联网连接、专线服务、云计算和数据中心(IDC)等多个方面,旨在为客户的全球业务扩展提供强有力的支持。互联网连接......
  • IceRPC之传入响应和拦截器->快乐的RPC
    作者引言.Net8.0下的新RPC很高兴啊,我们来到了IceRPC之传入响应和拦截器->快乐的RPC,基础引导,让自已不在迷茫,快乐的畅游世界。传入响应Incomingresponse了解如何演绎传入的响应。收到传入响应调用器invoker异步返回传入响应。该传入响应是由连接从对等点接收响应......
  • Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?
    @Autowired和@Resource都是JavaSpring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC)。它们的区别主要在以下三个方面:源头不同 @Autowired是Spring自带的注解,而@Resource是JSR250规范中定义的注解。因此,在使用Spring框架的时候,通常建议使用@Autowired注解。  查找顺序......
  • 初识上位机(上):搭建PLC模拟仿真环境
    大家好,我是Edison。作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。后续,我会考虑再出一个系列文章一起玩工控上位机。什么是上位机上位机,通常是指在数据采集与控制系统中位于较高层级、具有较强数据处理能力......
  • Oracle update语句引起大量业务卡顿
    记一次update语句引起大量业务卡顿分析处理过程,聊聊我的思路。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。以一个例子为切入点一、问题背景某业务模块反馈最近出现过几次业务卡顿,数据库中定位到有几个insertinto语句的gc等待比较严重,虽然......
  • ModbusTCP从站(服务端)扫描工具 python实现
    扫描指定IP网络下,有哪些modbusTCP服务端[1-247]frompymodbus.clientimportModbusTcpClientfrompymodbus.exceptionsimportModbusIOException,ConnectionException,NoSuchSlaveExceptionimporttimedefread_holding_registers(client,slave_address):""&quo......