Ubuntu18.04上踩坑之pycocoevalcap——meteor.py

2024-02-01 01:30

本文主要是介绍Ubuntu18.04上踩坑之pycocoevalcap——meteor.py,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


这一切源于:

第一次配置双系统时,给Ubuntu分配了太少的空间,导致后来只存放几个Project(还要保存训练文件)就内存不够了,于是下定决心重装Ubuntu!


问题描述:

顺利安装完Ubuntu、pycharm、anaconda、pytorch之后,在旧Ubuntu上可以完美运行的Project在这里爆出了一个bug:

  

    File "/home/teemo/Desktop/code/ggnn/SA-LSTM-master/pycocoevalcap/meteor/meteor.py", line 24, in __init__
         stderr=subprocess.PIPE) 
    File "/home/teemo/anaconda3/envs/SALSTM/lib/python2.7/subprocess.py", line 711, in __init__   
          errread, errwrite)
    File "/home/teemo/anaconda3/envs/SALSTM/lib/python2.7/subprocess.py", line 1343, in _execute_child
          raise child_exception
OSError: [Errno 2] No such file or directory 


尝试解决:

首先想到有可能是python的包的问题,于是我检查了版本包括重新下载包,没有用,所以版本问题排除。我开始去网上查阅了有关的解决方法,唯一有效果(未完全解决)的尝试如下:

在调用Popen的代码段里添加shell=True

self.meteor_cmd = ['java', '-jar', '-Xmx2G', METEOR_JAR, \'-', '-', '-stdio', '-l', 'en', '-norm']self.meteor_p = subprocess.Popen(self.meteor_cmd, \cwd=os.path.dirname(os.path.abspath(__file__)), \stdin=subprocess.PIPE, \stdout=subprocess.PIPE, \stderr=subprocess.PIPE,  \shell=Ture)# Used to guarantee thread safetyself.lock = threading.Lock()

之后重新运行却又重新报了错误:

IOError: [Errno 32] Broken pipe

于是我又双叒叕寻找解决方案,看到一篇帖子说可能是java的原因,于是我进入\pycocoevalcap\meteor 路径,执行 java 命令:

java -jar -Xmx2G meteor-1.5.jar - - -stdio -l en -norm

提示找不到java

在输入apt install default-jre安装java后,再次运行命令就不会报错了。

java -jar -Xmx2G meteor-1.5.jar - - -stdio -l en -norm

代码也能完美运行了。

其实此前在Popen代码段里添加shell=True,删除了也不会影响代码运行。

参数详解:
shell: 如果shell为True,那么指定的命令将通过shell执行。如果我们需要访问某些shell的特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用的。

shell=True参数会让subprocess.call接受字符串类型的变量作为命令,并调用shell去执行这个字符串,当shell=False是,subprocess.call只接受数组变量作为命令,并将数组的第一个元素作为命令,剩下的全部作为该命令的参数。

举个例子来说明:
from subprocess import call    
cmd = "cat test.txt; rm test.txt"    
call(cmd, shell=True)  


上述脚本中,shell=True的设置,最终效果是执行了两个命令
cat test.txt 和 rm test.txt


把shell=True 改为False,
from subprocess import call 
cmd = "cat test.txt; rm test.txt"    
cmd = shlex(cmd)    
call(cmd, shell=False)  

则调用call的时候,只会执行cat的命令,且把 "test.txt;" "rm" "test.txt" 三个字符串当作cat的参数,所以并不是我们直观看到的好像有两个shell命令了。

也许你会说,shell=True 不是很好吗,执行两个命令就是我期望的呀。但其实,这种做法是不安全的,因为多个命令用分号隔开,万一检查不够仔细,执行了危险的命令比如 rm -rf / 这种那后果会非常严重,而使用shell=False就可以避免这种风险。

总体来说,看实际需要而定,官方的推荐是尽量不要设置shell=True。

来源:https://www.cnblogs.com/domestique/p/8056269.html


这篇关于Ubuntu18.04上踩坑之pycocoevalcap——meteor.py的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665658

相关文章

一文教你Python引入其他文件夹下的.py文件

《一文教你Python引入其他文件夹下的.py文件》这篇文章主要为大家详细介绍了如何在Python中引入其他文件夹里的.py文件,并探讨几种常见的实现方式,有需要的小伙伴可以根据需求进行选择... 目录1. 使用sys.path动态添加路径2. 使用相对导入(适用于包结构)3. 使用pythonPATH环境

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

python IDLE的执行py文件

Import 在IDLE下也可以用import来运行文件。如运行test.py文件:improt test 但是对于一个文件,improt只能在第一次导入时运行文件。在第一次导入之后,其他的导入都不会再工作,甚至在另一个窗口中改变并保存了模块的源代码文件也不行。实验了下,发现重启IDEL后依然不行。这是有意设计的结果。导入是一个开销很大的操作以至于每个程序不能够重复多于1次。 Reload

YOLOV5入门教学-common.py文件

在 YOLOv5 框架中,common.py 文件是一个核心组件,负责定义深度学习模型的基础模块和常用操作。无论是卷积层、激活函数、特征融合还是其他复杂的模型结构,common.py 都提供了灵活且高效的实现。在这篇文章中,我们将深入解析 common.py 的设计思想、各个模块的功能以及它在 YOLOv5 中的应用。通过理解该文件的实现细节,不仅可以帮助我们更好地掌握 YOLOv5 的内部结构,

[全网首发]2024国赛数学建模ABCE题完整思路+py(matlab)代码+成品论文参考+持续更新

AB题详细思路(含问题一问题二模型) CE题问题一代码+思路已经写好[python+matlab两种都会更新 需要完整版的看这里: 点击链接加入群聊【2024数学建模国赛资料汇总】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=lZncBILk30DuPRI1Bd8X-3Djv7ZVZyAv&authKey=kKqNSSEbbZN%2FVKn%2BICOq

关于win7下Django无法找到manage.py

前一段时间学习Python-Django,由于目前对Linux还不是很熟悉所以就在window下学习了,用的是Python3.3在建立个人blog时就是找不到Django生成的文件,可是也不显示出错,在网上找了很多说是bug经过认真仔细观察终于发现了在电脑C盘用户本机里面,现在写出来希望有需要的不要再浪费精力了

NCBI-get-GCFIDs_fast.py

import requestsimport osimport redef download_genome_first(gcf_id):# 构建FTP下载路径base_url = "https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/"# 提取GCF号的数字部分并按三位分割parts = gcf_id.split('_')[1] # 提取数字部分path_