Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Tesseract不接受进程替换

Tesseract不接受进程替换
EN

Unix & Linux用户
提问于 2022-04-04 09:08:16
回答 1查看 64关注 0票数 0

我正在制作一个快速脚本,应该使用剪贴板中图像上的OCR工具(tesseract)将其转换为文本并输出。看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

temp="$(mktemp tmpXXX.png)"
xclip -selection clipboard -t image/png -o > $temp
tesseract $temp stdout 2>/dev/null
rm $temp

我想知道为什么这个单线tesseract <(xclip -selection clipboard -t image/png -o) stdout不能工作?据我所知,进程替换应该生成临时文件(类似于我的完整脚本),tesseract将其用作输入文件。唉,这导致了一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error in pixReadStream: Unknown format: no pix returned
Error in pixRead: pix not read
Error during processing.

有人知道为什么会这样吗?

提前谢谢。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-04-04 10:10:17

进程替换是一种ksh特性(在zsh和bash中也是可用的),而不是使用管道(在支持/dev/fd/n的系统上未命名,而不是临时文件)。

在这里,tesseract可能需要能够在文件中查找或者预先知道它的大小,这在管道中是不可能的。它还可以期望文件名具有特定的扩展名。

对于使用临时文件的进程替换,您需要只在=(...)外壳中可用的zsh表单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tesseract =(xclip -selection clipboard -t image/png -o) stdout

您可以设置$TMPPREFIX (默认为/tmp/zsh)和/或$TMPSUFFIX (默认为空),以控制=(...)创建的临时文件是如何命名的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TMPSUFFIX=.png
tesseract =(xclip -selection clipboard -t image/png -o) stdout

例如。

在5.0之前的zsh和bash版本中,以及在Linux或Cygwin上,您还可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  xclip -selection clipboard -t image/png -o > /dev/fd/3 &&
    tesseract /dev/fd/3 stdout
} 3<<< ''

由于遗传和字符串(以前在bash中)被实现为已删除的临时文件,并且在Linux和Cygwin上,打开/dev/fd/n (其中n是在文件上打开的文件描述符)将打开该文件,而不是像在大多数(如果不是所有其他系统)上那样重复fd。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/697958

复制
相关文章
[操作系统] 进程程序替换
linux操作系统重大部分程序都是C语言写的,包括bash,ls等在内。用C语言写的程序都有main函数,可以接受argv和env,所以当使用**exec*e**系列的函数传入自定义的env时实际上就是给要执行的进程main传入env。
DevKevin
2025/02/12
320
[操作系统] 进程程序替换
【Linux】进程替换
为什么我们执行我们的程序,最后跑起来的确实ls的命令? 所以execl的作用是让我们(进程)用exec*函数,执行起来新的程序。 会替换掉原本的程序,执行我们新调用的程序。
薛定谔方程难
2024/08/07
840
【Linux】进程替换
Linux:进程替换
        为什么要有进程替换呢???比方说我们想用fork创建一个子进程去帮助我们完成一个工作,这个工作我们需要封装成一个函数去使用,但难道我们每次都要自己写一个函数吗?或者说子进程一定要用我父进程的代码吗?  难道不可以是我们之前已经写好的一个可执行程序,当我想去执行的时候直接让子进程用一下不就可以了,但是因为操作系统不相信任何人,所以我们也必须要有一些系统调用接口来完成这个工作。
小陈在拼命
2024/10/15
1370
Linux:进程替换
【Linux】进程替换
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html
秦jh
2024/10/01
930
【Linux】进程替换
【linux】进程等待与进程替换
任何子进程,在退出的情况下,一般必须要被父进程进行等待。进程在退出的时候,如果父进程不管不顾,退出进程,状态Z(僵尸状态),内存泄漏
用户11029103
2024/11/16
810
【linux】进程等待与进程替换
【Linux】进程程序替换
hello,各位大佬!Linux进程程序替换也是Linux进程中非常重要的部分。我们将从什么是Linux进程程序替换,为什么要有Linux进程程序替换,以及如何实现Linux进程程序替换(原理)三个方面展开讲解。闲话少叙,我们正式开始!!
破晓的历程
2024/06/24
1080
【Linux】进程程序替换
初识Linux · 进程替换
由前面的章节学习,我们已经了解了进程状态,进程终止以及进程等待,今天,我们学习进程替换。进程替换我们从如下几个点开始介绍,第一,直接看现象,第二,解释原理,第三,将代码改成多线程版本,第四,使用所有的替换函数,认识参数的含义。
_lazy
2024/10/16
980
初识Linux · 进程替换
Linux进程控制【进程程序替换】
子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程 的程序替换为目标程序,此时需要用到 Linux 进程程序替换相关知识
北 海
2023/07/01
2590
Linux进程控制【进程程序替换】
Linux进程控制——Linux进程程序替换
前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么!
Eternity._
2024/06/14
1050
Linux进程控制——Linux进程程序替换
【Linux】进程的程序替换
红框中的代码实际上是父进程的代码,在没有执行fork之前代码就有了,在没有创建子进程之前,父进程的代码加载到内存了,子进程被创建出来是没有独立的代码,这个代码是父进程的代码,父进程通过if判断分流让子进程去跑了
lovevivi
2023/04/28
2K0
【Linux】进程的程序替换
【Linux】详解进程程序替换
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。程序替换所做的本质工作就是将代码和数据加载到内存。
用户10923276
2024/03/30
960
【Linux】详解进程程序替换
进程控制第二弹(进程程序替换)
程序运行后,调用execl函数后,我们的程序去执行了ls命令,原来的进程中printf("testexec end! ...\n"); 没有执行。
南桥
2024/04/22
870
进程控制第二弹(进程程序替换)
【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程
用户10925563
2024/06/04
1850
【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换
【Linux】进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换
可以发现,错误码为0时,代表代码正常执行完毕,所以我们平时主函数里的return 都是return 0
aosei
2024/01/23
3460
【Linux】进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换
【Linux】进程详解:进程的创建&终止&等待&替换
我们已经了解过了进程的基本概念,这一章我们要进一步的学习进程,即 **「进程的创建和终止」**。
IsLand1314
2024/10/19
4220
【Linux】进程详解:进程的创建&终止&等待&替换
Go: 系统调用与进程替换
在这篇文章中,我们将通过分析一个使用 Go 语言编写的示例程序来探讨 Go 语言在进行系统调用和进程替换方面的应用。该示例程序使用了 os 和 os/exec 标准库,以及 syscall 包来实现在 Unix 系统上的进程替换功能。本文将逐步解析这段代码,以揭示其背后的关键概念和技术细节。
运维开发王义杰
2024/04/25
1590
Go: 系统调用与进程替换
【Linux】开始学习进程替换吧!
送给大家一句话: 人生中有些事,你不竭尽所能去做,你永远不知道你自己有多出色。—— 尾田荣一郎《海贼王》
叫我龙翔
2024/03/30
920
【Linux】开始学习进程替换吧!
Linux:进程控制(二.详细讲解进程程序替换)
进程程序替换是指在运行过程中将一个进程的地址空间中的代码、数据和堆栈等内容完全替换为另一个程序的代码、数据和堆栈的过程。这个过程通常是由操作系统提供的 exec 系列函数来实现的:
是Nero哦
2024/05/30
2280
Linux:进程控制(二.详细讲解进程程序替换)
[MachineLearning]tesseract使用
https://github.com/tesseract-ocr/tesseract
wOw
2018/09/18
1.6K0
[MachineLearning]tesseract使用
【Linux】进程理解与学习-程序替换
进程可以通过程序替换的方式来执行一个全新的程序,具体的做法则是通过对应的程序替换的几个系统调用函数来实现,下面先来看一下程序替换的现象,根据这个现象来分析程序替换实现的原理。
诺诺的包包
2023/04/04
1.1K0
【Linux】进程理解与学习-程序替换

相似问题

进程替换语法

10

进程替换的实现和进程替换中的并发性

20

使用进程替换,只发送stderr到进程。

10

子壳和进程替换

10

从屏幕内替换屏幕进程

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文