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

2024-09-30 01:21:17 发布

您现在位置: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”时,它运行得很好

我使用go获得如下输出:

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, "")

Tags: 文件path命令cmdgooutput系统stdout
3条回答

在Go中,{}还没有执行任何操作。它返回一个exec.Cmd结构,您必须使用它提供的Run方法执行该结构

然后,您执行的命令的输出通过管道传回Go,而不是直接传回控制台

使用Output函数执行和捕获输出的工作示例:

func 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-8

print("hello")
print("系统")

添加以下代码,效果良好:

   import sys,io,platform
   if(platform.system()=='Windows'):
      import sys,io
      sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

为了能够打印中文,您必须创建一个可以显示中文的cmd提示符。启动regedit并导航到

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont

添加新字符串

Name: 935
Value: *新宋体

这将显示为NSimSun。这是在Win7上。我还没有在W10上试过——它可能会接受NSimSun而不是中国的同类产品。我不记得我是怎么得到这个中文名字的

关闭regedit,启动新的cmd提示符。弹出属性,选择字体并将其更改为NSimSun

现在运行一段打印英文和中文的小代码,您应该可以看到中文和英文部分

至于GoLang位,你必须看看@TehSphinX的答案

相关问题 更多 >

    热门问题