gpt4 book ai didi

go - 使用 cli Go 包读取外部文件

转载 作者:IT王子 更新时间:2023-10-29 02:05:31 24 4
gpt4 key购买 nike

我正在使用 cli Go 包:https://github.com/codegangsta/cli

package main

import (
"fmt"
"github.com/codegangsta/cli"
"io/ioutil"
"os"
)

func main() {
app := cli.NewApp()
app.Name = "m2k"
app.Usage = "convert markdown to kindle"
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "file",
Value: "english",
Usage: "language for the greeting",
},
}

app.Action = func(c *cli.Context) {
file := "default"

if len(c.Args()) > 0 {
file = c.Args()[0]
}

//fmt.Println("file %s", file)
fmt.Println("file %s", file)

b, err := ioutil.ReadFile(file)
if err != nil {
panic(err)
}

err = ioutil.WriteFile("output.txt", b, 0644)
if err != nil {
panic(err)
}
}

app.Run(os.Args)
}

我是围棋初学者。所以我可能做错了什么。

我在命令行中执行此操作(目录中有一个名为 markdown.txt 的文件):

~/go/io$ go run io.go -file markdown.txt

但是我得到这个错误:

created by runtime.main /usr/lib/go/src/pkg/runtime/proc.c:221 exit status 2

编辑:

我将 fmt.Println("file %s", file) 写入 app.Action 但没有打印任何内容。这能说明问题吗?

最佳答案

cli.Context.Args 从当前上下文返回参数。意思是,不是提供的全局参数。如果打印 c.Args 的长度,您会看到它为零。

您可以使用 c.String("file") 或删除 app.Flags,提供格式为 go run io.go path/to/file.txt 的命令并使用 c.Args.First()

例子:

package main

import (
"github.com/codegangsta/cli"

"io/ioutil"
"log"
"os"
"strings"
)

func main() {
app := cli.NewApp()
app.Name = "m2k"
app.Usage = "convert markdown to kindle"
app.Action = mainAction
app.Run(os.Args)
}

func mainAction(c *cli.Context) {
var err error

// use stdin/stdout by default
in := os.Stdin
out := os.Stdout
defer out.Close()
defer in.Close()

// replace stdin if given
if c.Args().First() != "" {
in, err = os.Open(c.Args().First())
if err != nil {
log.Fatalln(err)
}
log.Printf("Using '%s' as source\n", c.Args().First())
}

// replace stdout if given
if c.Args().Get(1) != "" {
out = os.NewFile(0666, c.Args().Get(1))
log.Printf("Writing output to '%s'\n", c.Args().Get(1))
}

b, err := ioutil.ReadAll(in)
if err != nil {
log.Fatalln(err)
}

out.Write([]byte(strings.Replace(string(b), "in", "out", 1)))
}

结果:

echo "in file content" > in.txt
go run foo.go in.txt
// 2015/02/17 11:49:49 Using 'in.txt' as source
// out file content

关于go - 使用 cli Go 包读取外部文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com