我可以将打印作业直接从 python 程序发送到 CUPS 打印服务器的 IP 地址吗?

Can I send print jobs directly from a python program to the IP address of a CUPS print server?

我有两台 linux 台固定 IP 地址的计算机:

  1. 一个打印服务器,通过CUPS共享连接的打印机。
    (服务器的 IP 地址为“192.168.1.2”,打印机名为 "test_printer"。)
  2. 一台计算机,其上有 python 应用程序 运行,应该能够使用此打印服务器。

不幸的是,通过 CUPS 的打印机传播似乎无法可靠地工作(可能是由于网络结构)。

我可以将打印作业直接从 python 程序发送到 CUPS 打印服务器吗?
如果是这样,你能提供一个小例子吗?

理论上,我会向 IP 地址 + 端口发送正确格式的数据,但我没有让它工作...


以下是我目前发现的方法以及我遇到的问题:





我用的是python3.6.7.
打印服务器使用 CUPS 2.2.1。

不是 Python 程序员,我无法提供任何示例代码。

但我可以给你一些其他的提示:

  1. 您的假设 "in theory, [....] just send correctly formatted data to the IP address + port" 是错误的。

    如果你发送东西,你必须"talk IPP"到CUPS服务器(是的,通过IP地址+端口631)。但是仅仅发送一个文件比谈论 IPP 要少得多。

    否则,您可以使用 'netcat IPaddress port-no < filename' 打印到任何 CUPS 队列(这将是一个巨大的安全问题)。

    因此,如果您想将程序与 IPP/CUPS

  2. 集成,则必须使用一些支持 IPP 的库
  3. 一种替代方法是让您的程序通过能够执行此操作的 CLI 工具执行 "IPP talk to CUPS"。

    查看设计 IPP 的打印机工作组 (PWG) 的 ippsample code。那还在 "beta" 中,但已经完全可用。它的所有二进制文件都是命令行 (CLI) 实用程序:

    • 提供ippfind辅助工具。如果您 运行 它没有任何参数,它将通过打印其各自的 IPP URI 来打印可用 IPP 服务(打印服务器 and/or 打印机设备)的列表。

    • 它提供了一个ippserver命令行,它可以启动一个成熟的,你猜对了,IPP服务器暴露你想要的任何功能。

    • 然后 ipptool 作为 IPP 客户端包含在内。您可以 运行 'ipptool -f myprintfile -t -v ipp://cupsserver/printers/test_printer print-job.test'"myprintfile" 发送到队列 "test_printer" on "cupsserver"(给出示例 IPP URI ipp://cupsserver/printers/test_printer)并观看它会在这样做时将 IPP 与 CUPS 通信。

另请参阅我的 ASCIIcast“[TUTORIAL] IPP 示例软件(使用 AppImage 制作)”here。 {https://asciinema.org/a/155588 }。 提示:如果播放速度太快无法及时跟上和理解屏幕,请使用'pause'按钮,以您自己的速度阅读,然后继续播放。