You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang实现用户输入内容向USB物理打印机打印的方法求助

在Go中通过USB打印机打印用户输入内容的解决方案

核心实现思路

直接操作USB设备的底层通信在Go中门槛较高,更适合终端环境的方案是调用系统自带的打印命令行工具,通过Go的os/exec包来触发打印流程,无需处理复杂的USB协议。

修改后的完整代码

package main

import (
	"fmt"
	"os/exec"
	"runtime"
)

func main() {
	fmt.Println("First name: ")
	var name1 string
	fmt.Scanln(&name1)

	fmt.Println("Last name: ")
	var name2 string
	fmt.Scanln(&name2)

	fullName := "My full name is: " + name1 + " " + name2
	fmt.Println(fullName)

	// 立即触发打印
	if err := printText(fullName); err != nil {
		fmt.Printf("打印失败: %v\n", err)
	}
}

// printText 调用系统打印工具输出文本内容
func printText(content string) error {
	var cmd *exec.Cmd

	// 根据操作系统选择对应打印命令
	switch runtime.GOOS {
	case "windows":
		// Windows通过cmd管道传递内容给print命令
		cmd = exec.Command("cmd", "/c", "echo", content, "|", "print")
	case "linux":
		// Linux使用lp命令,需替换为你的打印机名称
		cmd = exec.Command("lp", "-d", "你的打印机名称")
	case "darwin":
		// macOS使用lp命令,需替换为你的打印机名称
		cmd = exec.Command("lp", "-d", "你的打印机名称")
	default:
		return fmt.Errorf("当前操作系统不支持")
	}

	// 将打印内容传入命令的标准输入
	stdin, err := cmd.StdinPipe()
	if err != nil {
		return err
	}
	defer stdin.Close()

	if _, err := stdin.Write([]byte(content)); err != nil {
		return err
	}

	return cmd.Run()
}

关键注意事项

  • 打印机名称配置:
    • Windows:在命令行执行wmic printer get name查看可用打印机名称
    • Linux/macOS:执行lpstat -p查看打印机列表
  • 系统工具依赖:确保系统已安装对应打印工具(Windows默认自带print,Linux/macOS默认自带lp)
  • 权限问题:Linux/macOS下需确保当前用户属于lpadmin组,拥有打印权限
  • Windows替代方案:如果管道传递内容失败,可先将内容写入临时文件,再用print 临时文件路径命令打印

内容的提问来源于stack exchange,提问作者usertyfuture13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:25:48