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:在命令行执行
- 系统工具依赖:确保系统已安装对应打印工具(Windows默认自带
print,Linux/macOS默认自带lp) - 权限问题:Linux/macOS下需确保当前用户属于
lpadmin组,拥有打印权限 - Windows替代方案:如果管道传递内容失败,可先将内容写入临时文件,再用
print 临时文件路径命令打印
内容的提问来源于stack exchange,提问作者usertyfuture13
相关产品推荐
相关产品推荐

