无法打印中文,如果使用 Go 到 exec python 脚本

我使用以下命令通过Go运行python 3.7.4文件。


Go exec.Command("cmd", "/C", "path_to_python_exe", "python_script_file")

以下脚本将打印“abc”而不使用中文:


print ("abc")

print ("系统")

并且它不打印任何内容,也不返回任何错误:


print ("系统")

print ("abc")

当我在windows / linux终端中运行“python test.py”时,它运行良好。


我得到的输出如下:


stdout, err := cmd.StdoutPipe()

cmd.Start()


reader := bufio.NewReader(stdout)

output := make([]string, 0)

for {

    line, err2 := reader.ReadString('\n')

    if err2 != nil || io.EOF == err2 {

        break

    }

    output = append(output, line)

}


cmd.Wait()


return strings.Join(output, "")


RISEBY
浏览 196回答 3
3回答

扬帆大鱼

为了能够打印中文,您必须创建一个可以显示中文的cmd提示。开始注册表编辑并导航到Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont添加新字符串Name: 935 Value: *新宋体这将显示为 NSimSun。这是在Win7上。我还没有在W10上尝试过 - 它可能接受NSimSun而不是中文的等效物。我不记得我是怎么得到这个等同的中文名字的。关闭注册表编辑器,启动新的 cmd 提示符。弹出属性,选择字体并将其更改为NSimSun。现在运行打印英文和中文的小段代码,你应该看到中文和英文位。至于GoLang位,你将不得不看看@TehSphinX的答案。

www说

添加以下代码,效果很好:   import sys,io,platform   if(platform.system()=='Windows'):      import sys,io      sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

哆啦的时光机

在Go中,还没有执行任何东西。它返回一个结构,您必须使用它提供的方法执行该结构。exec.Commandexec.CmdRun然后,您执行的命令的输出将通过管道传回 Go,而不是直接传输到控制台。使用函数执行和捕获输出的工作示例:Outputfunc main() {    cmd := exec.Command("python", "test.py")    bts, err := cmd.Output()    if err != nil {        log.Fatal(err)    }    fmt.Print(string(bts))}test.py文件:# coding=UTF-8print("hello")print("系统")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go