如何解决subprocess.Popen通讯方法自动打开文件,停止程序执行,直到我手动关闭文件
我在python子进程模块上遇到一个问题。
import os,subprocess
BLEU_SCRIPT_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'multi-bleu.perl')
command = BLEU_SCRIPT_PATH + ' %s < %s'
ref = "ref.en-fr.test.txt"
hyp = "hyp100.en-fr.test.txt"
p = subprocess.Popen(command % (ref,hyp),stdout=subprocess.PIPE,shell=True)
result = p.communicate()[0].decode("utf-8")
# ...
# ...
multi-bleu.perl文件进行评估并返回实数或错误(如果有);但这不是我的问题。
最后一行代码使用默认的文本编辑器自动打开multi-bleu.perl文件,停止程序执行,直到我手动关闭该文件。
如何禁用此行为?
解决方法
我不认为subprocess.Popen
会解释文件中的所有shebang。您需要在要执行的命令中指定可执行文件。另外,Popen需要一个列表作为第一个参数,因此您需要将字符串格式“提升”到命令列表中。
command = [
'/path/to/perl',BLEU_SCRIPT_PATH + ' %s < %s' % (ref,hyp)
]
p = subprocess.Popen(command,stdout=subprocess.PIPE,shell=True)
您可能还想看看subprocess.check_output
,它将使代码更容易一些。
谢谢您的帮助,它非常有帮助。我是在Linux平台(显然具有默认的perl解释器)上编写代码的,当我回到Windows时,我并没有注意这种处理方式。一旦安装了perl解释器并将其添加到环境中(您提出的建议):
command = BLEU_SCRIPT_PATH + ' %s < %s'
if os.name == 'nt' : # windows os
command = "perl " + command
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。