proc = subprocess.Popen(cmd_args, **subprocess_args())
时间: 2023-12-19 20:03:52 浏览: 40
这行代码使用 Python 的 subprocess 模块运行一个外部命令,其中 cmd_args 是一个包含命令及其参数的列表,subprocess_args() 返回一个包含 subprocess 模块参数的字典。Popen 函数将会启动一个新的进程,并返回一个 Popen 对象,该对象表示该进程。通过该对象,可以与该进程进行交互,比如向其输入数据、获取其输出等。
相关问题
Traceback (most recent call last): File "C:\Program Files\Python310\lib\site-packages\pytesseract\pytesseract.py", line 255, in run_tesseract proc = subprocess.Popen(cmd_args, **subprocess_args()) File "C:\Program Files\Python310\lib\subprocess.py", line 971, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Program Files\Python310\lib\subprocess.py", line 1440, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 系统找不到指定的文件。
这个错误通常是由于缺少Tesseract OCR引擎或Tesseract可执行文件的路径不正确导致的。请尝试以下解决方法:
1. 确保安装了Tesseract OCR引擎。你可以从以下链接下载并安装合适的版本:https://github.com/UB-Mannheim/tesseract/wiki
2. 确认Tesseract可执行文件(tesseract.exe)的路径是否正确。在你的代码中,pytesseract库会自动寻找可执行文件,但有时可能找不到。你可以尝试显式指定可执行文件的路径,如下所示:
```python
import pytesseract
from PIL import Image
# 设置Tesseract可执行文件路径
pytesseract.pytesseract.tesseract_cmd = r'C:\path\to\tesseract.exe'
def text_recognition(image_path):
# 打开图像文件
image = Image.open(image_path)
# 使用pytesseract进行文字识别
text = pytesseract.image_to_string(image)
# 返回识别的文字
return text
# 调用函数进行文字识别
image_path = 'image.jpg' # 替换为你的图像文件路径
recognized_text = text_recognition(image_path)
print(recognized_text)
```
请确保将`tesseract.exe`的路径替换为你自己系统上的正确路径。
如果以上方法仍然无法解决问题,请确保你已正确安装了Tesseract OCR引擎,并且在系统环境变量中添加了Tesseract的安装目录。如果问题仍然存在,可能需要重新安装Tesseract OCR引擎或尝试其他OCR库。
subprocess.popen阻塞
subprocess.Popen在读取子进程的标准输出时,如果子进程没有输出,使用stdout.read()会导致程序阻塞。 为了避免阻塞,可以采用两种方法。一种是在读取输出之前,将文件描述符设置为非阻塞模式,例如使用fcntl库的fcntl函数进行设置。具体实现可以参考下面的代码示例:
```
import select
import os
import subprocess
import time
import fcntl
args = ['python','./fetch_file2.py',ip,path]
proc = subprocess.Popen(args, stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)
def non_block_read(output): # 避免阻塞
fd = output.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
try:
return output.read()
except:
return ""
while proc.poll() is None: #fetch中rsync结束。但是fetch没有结束(怀疑输出过大) 导致这里一直是None
pass
print proc.poll() # 杀死fetch进程 返回-9
print proc.stderr.read() #阻塞#方法1:
#non_block_read(proc.stderr) #防止阻塞#方法2:
select_rfds = [ proc.stdout, proc.stderr]
(rfds, wfds, efds) = select.select(select_rfds, [],[])
if proc.stderr in rfds: #不存在。若select_rfds=[stderr],则阻塞在select上
len = proc.stderr.read(10)
if len == 0:
print "empty"
else:
print "proc.stderr"
if proc.stdout in rfds:
print "proc.stdout"
```
通过设置文件描述符为非阻塞模式,可以避免阻塞问题,并且使用select.select来检查子进程的标准输出是否可读。 这样即可解决subprocess.Popen阻塞的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [对Python subprocess.Popen子进程管道阻塞详解](https://download.csdn.net/download/weixin_38661128/12866393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [python subprocess.Popen read阻塞问题解决](https://blog.csdn.net/weixin_41582874/article/details/127939185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [python subprocess阻塞](https://blog.csdn.net/weixin_30855761/article/details/99389411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)