【无标题】使用Go (或者 Python) 执行外部命令,直接模式和 Shell模式的区别

有时,我们需要通过编程语言执行外部程序、命令或脚本。

Go 语言里提供了 “os/exec” 库,Python 里面也提供了 subprocess 这样的库。

但在具体调用外部命令时,有两种方式:

  • 直接调用外部命令
  • 通过 Shell 调用外部命令

以 Go 语言为例:

cmd := exec.Command("./myscript.sh", "arg1", "arg2") // 直接执行外部命令

或者

cmd := exec.Command("sh", "-c", "./myscript.sh arg1 arg2")// 通过 Shell 调用外部命令

两者的区别如下:

直接运行通过 SHELL 运行
参数必须以字符串数组的形式传入,不能把多个参数用空格拼接成一个字符串把命令和参数合并居一个字符串,传给 Shell 执行
不支持 Shell 的特性,比如环境变量,通配符,管道,重定向支持 Shell 特性,比如环境变理,通配符,管道,重定向
把参数直接传给命令,不会对参数进行解析,比如根据空格把一个字符串分成多个参数对整个命令行字符串进行解析,但不同的操作系统 / Shell 可能把字符串解析成不同的结果
不会引起 Shell 注入可能面临 Shell 注入的风险
继承 Go 的环境继承 Shell 的环境变量

我个人喜欢直接执行的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新修改 Qt 项目的 Kit 配置

要重新修改 Qt 项目的 Kit 配置,你可以按照以下步骤进行操作: 1. 打开 Qt Creator 首先,启动 Qt Creator,确保你的项目已经打开。 2. 进入项目设置 在 Qt Creator 中,点击菜单栏的 “Projects” 标签(通…

如何利用命令模式实现一个手游后端架构

1. 简介 命令模式是一种行为设计模式,它将一个操作延迟到运行时决定。在游戏开发中,命令模式通常用于处理游戏逻辑、玩家动作等,因为它可以提供更灵活的方式来执行操作,并且易于扩展。 2. 实现步骤 以下是使用命令模式实现手游…

Android - Windows平台下Android Studio使用系统的代理

这应该是第一篇Android的博文吧。以后应该会陆续更新的。记录学习Android的点点滴滴。 之前也看过,不过看完书就忘了,现在重拾Android,记录学习历程。 为何要用代理 因为更新gradle太慢了。 如何使用系统的代理 先找到系统代理的ip和端口。…

OceanMind海睿思参加2024数博会“数据要素赋能生态”活动,获两项数据要素优秀产品认证

近日,2024数博会“数据要素赋能生态”交流活动在贵阳国际生态会议中心成功举办,中新赛克海睿思作为国内数据要素产业优秀服务商代表受邀参加并荣获两项数据要素优秀产品认证。 作为2024数博会的重要组成部分,本次交流活动由北京赛迪出版传媒有…

如何用MySQL设计一个高效的关系数据库架构

如何用MySQL设计一个高效的关系数据库架构 设计一个高效的关系数据库架构是确保数据库性能、可维护性和扩展性的关键。一个良好的数据库设计不仅能够提高查询效率,还能减少数据冗余,降低维护成本。以下将详细介绍如何用 MySQL 设计一个高效的关系数据库…

通配符证书的申请及配置教程

在当今高度互联的世界里,网站和应用程序需要确保其数据传输的安全性,以保护用户的隐私和敏感信息不被窃取。为此,HTTPS协议成为了标准配置,而SSL/TLS证书则是实现这一安全协议的重要组成部分。特别地,对于那些运营着多…

react + ts + material-ui V5版本的table封装

以下是一份 material-ui V5版本的table封装 import React, { forwardRef, useImperativeHandle, useEffect, useState } from react; import {Table,TableBody,TableSortLabel,TableCell,TableContainer,TableHead,TableRow,Typography,Paper,Checkbox,CircularProgress,Box,Ta…

【Linux】CodeServer:云IDE部署

Code-server 是一个开源项目,它允许你在任何地方通过浏览器访问 Visual Studio Code(VS Code)编辑器。这意味着你可以在远程服务器或云端运行 VS Code,并通过浏览器进行编码、调试和开发,而不需要在本地安装 VS Code。…

Java基础(9)- Java代码笔记6

目录 一、数组常见算法 1.数组翻转 2.冒泡排序 3.二分查找 二、对象数组 1.基本使用 三、方法参数 1.基本数据类型和引用类型 2.基本数据类型做方法参数传递 3.引用数据类型做参数传递 四、命令行参数 五、其他操作 1.快速生成方法 2.快速抽代码到方法 3.debug调…

WPF中使用Echarts显示图表

在WPF中使用ECharts来显示图表,你需要将ECharts嵌入到WPF应用程序中。我们这里介绍两种方法显示图表: 目录 一、ECharts是一个基于JavaScript的开源可视化图表库,因此我们需要使用WebView控件来承载一个嵌入式浏览器,这样就可以…

如何禁止电脑访问网站

一、修改Hosts文件 找到Hosts文件:在Windows系统中,Hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。 编辑Hosts文件:以管理员身份打开记事本或任意文本编辑器,然后找到并打开Hosts文件。 添加禁止访问的域名&#…

JVM1-初识JVM

目录 什么是JVM JVM的功能 解释和运行 内存管理 即时编译 Java性能低的主要原因和跨平台特性 常见的JVM 什么是JVM JVM 全称是 Java Virtual Machine,中文译名:Java虚拟机 JVM本质上是一个运行在计算机上的程序,它的职责是运行Java字…

HTTP 请求方法(method)介绍

目录 一、GET 二、POST 三、其他方法 3.1 PUT 3.2 DELETE 3.3 HEAD 3.4 OPTIONS 3.5 TRACE 3.6 CONNECT 3.7 PATCH 3.8 LINK 和 UNLINK(扩展方法) HTTP(超文本传输协议)定义了多种请求方法,如: …

C++对C的扩充(8.28)

1.使用C手动封装一个顺序表&#xff0c;包括成员数组1个&#xff0c;成员变量n个 代码&#xff1a; #include <iostream>using namespace std;//类型重命名 using datatype int; #define MAX 30struct seqList { private: //私有权限datatype *data; //相当于 …

AI赚钱成功案例|像素级拆解一键生成提示词 文生图 图生视频

本文背景 之前弄了个诗词转画面大师&#xff0c;就是你给个句子&#xff0c;它就能给你画面提示词&#xff0c;接着用 AI 绘图软件能生成很棒的画面&#xff0c;再把图片弄成视频&#xff0c;最后能出个不错的作品。 最近看到那些漫剪大师的作品&#xff0c;配的歌好听&#xf…

easyPOI生成的excel添加水印

项目场景&#xff1a; 需求要求生成的excel添加水印&#xff0c;这个还是第一次听到&#xff0c;于是研究了一下。 引入依赖 代码如下&#xff1a; implementation (cn.afterturn:easypoi-base:4.5.0) {exclude group: com.google.guava, module: guavaexclude group: org…

NameNode 的 Web 界面

http://127.0.0.1:50070/ 图片显示的是Hadoop的Web界面导航栏。导航栏包含以下选项&#xff1a; Hadoop&#xff1a;Hadoop的主页。Overview&#xff1a;集群的概览信息。Datanodes&#xff1a;数据节点的状态和信息。Datanode Volume Failures&#xff1a;数据节点的卷故障信…

Python——Mixin设计模式

在Python中&#xff0c;Mixin是一种设计模式&#xff0c;它允许通过继承的方式将类的方法&#xff08;或属性&#xff09;混入&#xff08;mixin&#xff09;到其他类中。Mixin主要用于在多个类之间共享代码&#xff0c;特别是当这些类之间并没有直接的继承关系&#xff0c;或者…

Java项目: 基于SpringBoot+mysql旅游网站管理系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql旅游网站管理系统分前后台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作…

二叉树展开为列表(LeetCode)

题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 解题 clas…