如何包装交互式命令

2024-01-31

我正在构建一个 ftp 包装器,它在生成之前执行一些操作,我可以轻松地在 shell 脚本中执行此操作,但想知道如何在 go 中执行此操作

而 exec.Command 适用于简单命令。

out, err := exec.Command("ls").Output() // Works

如何包装交互式命令,例如 ftp

out, err := exec.Command("ftp").Output()

它就退出了。我如何处理标准输入?

例如,bash 等效项:

> ./t.sh 
Welcome to myftp 

ftp> open blahblah.com

> cat t.sh 
#!/bin/bash
echo "Welcome to myftp "
#extra commands such as auth/authoriz.. etc.,
shift
echo "$@"
ftp

C++ 等价物:

int main() {
    system("ftp");
    return 0;
}

我可能会做这样的事情,它更原生并且不涉及外部包

package main
import (
    "os"
    "os/exec"
)

func main() {

    cmd := exec.Command("ls")
    // redirect the output to terminal
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    cmd.Run()

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何包装交互式命令 的相关文章

随机推荐

  • Android:更改系统文件的权限

    我的手机已root 我在应用程序中编写了代码来更改位于 sys class leds lcd backlight brightness 的系统文件的文件权限 Runtime getRuntime exec su Runtime getRun
  • 如何使我的分割仅在一根实线上工作并且能够跳过字符串的引用部分?

    所以我们有一个简单拆分 https stackoverflow com questions 236129 how to split a string in c 236180 236180 include
  • 在 Ruby 中编辑 JSON 数组内容

    我的 JSON 数组的结构如下 data Chris long 10 lat 19 Scott long 9 lat 18 在 ruby 程序中 我希望能够编辑名称的纬度和经度值 但我不太确定该怎么做 sections each do us
  • 无法使我的按钮在不同浏览器中看起来相同

    我不太擅长网页设计 我使用 CSS 创建了一个按钮 但我不知道如何使其在不同的浏览器中看起来相同 这是我使用的按钮
  • GraphQL.js Node/Express:如何将对象作为 GraphQL 查询参数传递

    我的目标是能够在 GraphQL 查询中将对象作为参数传递 Goal accounts filter fieldName id fieldValues 123 filterType in id Error message filterTyp
  • 如何在 C# 中将 int 转换为 char[] 而不产生垃圾

    毫无疑问 考虑到可用的资源 这似乎是一个奇怪的请求ToString and Convert ToString 但我需要转换一个无符号整数 即UInt32 到它的字符串表示形式 但我需要将答案存储到char 原因是我正在使用字符数组来提高效率
  • PHP 中数组的负索引

    我发现一些使用负数组索引的代码 然后 我尝试使用它 没有什么特别的情况发生 它表现正常 我可以使用标准检索所有元素foreach loop 那么 使用这些负指数的目的是什么 我什么时候应该使用它 PHP 中的数组实际上只是某种有序映射 您可
  • 如何在Extjs 4中向ajax请求添加beforerequest事件?

    如何在Extjs4中将beforerequest和requestcomplete事件添加到特定的ajax请求 Regards Ext Ajax on beforerequest function console info beforereq
  • iPhone - 归档自定义对象数组

    我已经尝试了几个小时但无法解决这个问题 我正在制作一个保存未完成的国际象棋游戏的应用程序 因此我尝试将数组写入文件 如果有意义的话 这就是数组 NSMutableArray savedGames GameSave a NSMutableAr
  • 重用文本视图和网格

    我正在开发 Windows Phone 8 应用程序 我在 For 循环内动态创建多个 Textview 和 Grid for int j 0 j lt 300 j Image image new Image image Source ne
  • MySQL:具有多个 AND 条件的多对多关系

    我的 MySQL 数据库中有一个多对多关系 包含三个表 如下所示 表项 TABLE关系 仅存储项目和标签的id 表标签 每个项目可以有多个标签 标签也可以与多个项目相关 例如项目 鞋 可以具有标签 运动 和 皮革 而标签 运动 可以与项目
  • Java - TestNG:为什么我的断言在 try-catch 块中写入时总是通过

    我正在尝试使用一个简单的代码org testng Assert断言 2 个用例 在第一个用例中 我断言 2 个不相等的值Fail正确 但在第二个用例中 当我在 try catch 块中断言 2 个不相等的值时 结果始终返回为Pass 我的代
  • Arduino:字符串到整数得到奇怪的值

    我想转换一个String to an int 我所能找到的就是你必须将 String 转换为 char 数组 然后将该数组转换为int 但我的代码产生奇怪的值 我无法弄清楚问题是什么 void ledDimm String command
  • 如何在 Mac OS X 上将按钮连接到方法

    我已经习惯了在 iPhone 上编程 在那里 我将一个按钮连接到一个操作 然后通过创建如下方法来连接一个方法 IBAction DoStuff 然后我会为按钮创建一个出口 然后在 Interface Builder 中创建实际的按钮 然后
  • 快速长按自定义键盘的删除键

    我正在制作一个定制键盘 键盘上的删除键单击即可正常工作 但它不适用于长按 我想实现长按删除键 以便当用户按住删除按钮时 键盘会像标准ios键盘一样连续删除 我在 Stackoverflow 上提到了几个解决方案 例如 https stack
  • 从仅系统托盘的应用程序创建工具提示

    所以我试图在屏幕上的某个时刻创建一个工具提示 ToolTip tip new ToolTip tip Show foobar IWin32Window window new Point 100 100 问题是我不知道要插入什么window上
  • 如何从 AWS::Serverless::Function (SAM) 输出 api 资源 arns?

    我需要访问已使用 Cloudformation SAM 模板创建并订阅的网关的 arn 当我尝试以下操作时 出现错误 输出块中未解决的资源依赖项 GetResource AWSTemplateFormatVersion 2010 09 09
  • p:selectOneRadio 未使用 p:ajax 在事件“更改”中更新模型

    我正在使用一个p selectOneRadio with p ajax和另一个组件的值 p inputText 不将其值绑定到我的 bean 中 如果我使用p selectBooleanCheckbox相反 行为正是我所需要的 在调用 aj
  • 我们如何设置 kubernetes 在推送新容器时自动更改容器?

    我正在使用谷歌云来存储我的Docker图像和托管我的库伯内特斯簇 我想知道我怎样才能拥有库伯内特斯下拉图像latest每次推送新的标签时 我想图像拉取策略是要走的路 但它似乎没有完成这项工作 我可能错过了一些东西 这是我的容器规格 name
  • 如何包装交互式命令

    我正在构建一个 ftp 包装器 它在生成之前执行一些操作 我可以轻松地在 shell 脚本中执行此操作 但想知道如何在 go 中执行此操作 而 exec Command 适用于简单命令 out err exec Command ls Out