为什么Java重定向失败?

时间:2019-01-06 19:31:19

标签: python shell

我在这里检查了类似的Java重定向问题,但是找不到解决我问题的方法。

我正在尝试在ubuntu 18.04中运行python 3.6脚本,该脚本通过bash脚本调用Java程序。

原始编码器确认问题出在“ tokenize_sent.sh”中的路径上 但是以下几个重定向测试产生了相同的错误。

tokenize_sent.sh脚本:

#!/usr/bin/env bash

java edu.stanford.nlp.process.DocumentPreprocessor ../tmp/in.txt > ../tmp/out.txt

Bash脚本位于此处:

Datasets/stanford-parser-full-2017-06-09/tokenize_sent.sh

好消息是python脚本/ bash正在将正确的文本文件写入项目目录中的../ tmp / in.txt。

python脚本从项目目录运行,该目录包含所有必需的文件夹及其子文件夹,包括 所需的模型和斯坦福解析器等。

数据集

推断发送

tmp(正确的in.txt写入此处,但out.txt失败)

SentenceChange_Read2Files_MASTER.py

我是python和java的新手。希望这是对tokenize_sent.sh的快速修复。

感谢您的帮助。


第68行的python代码段,该代码段调用“ tokenize_sent.sh”:

NEWLINE = '<NEWLINE>'
def tokenize_sentences(text):
    open('tmp/in.txt', 'w').write(text.replace('\n\n', NEWLINE))
    os.system('Datasets/stanford-parser-full-2017-06-09/tokenize_sent.sh')
    tokens = open('tmp/out.txt').read().split('\n')
    print('Total tokens in dataset', len(tokens))

    return [token for token in tokens if len(token) > 0]

运行“ SentenceChange_Read2Files_MASTER.py”时出错

Datasets/stanford-parser-full-2017-06-09/tokenize_sent.sh: line 7: ../tmp/out.txt: No such file or directory

Traceback (most recent call last):
  File "SentenceChange_Read2Files_MASTER.py", line 162, in <module>
    changed = change_book(open(prefix + 'Jane Austen___Northanger 
Abbey.txt').read(), open(prefix + 'Bram Stoker___Dracula.txt').read())
File "SentenceChange_Read2Files_MASTER.py", line 90, in change_book
    toChangeSent = tokenize_sentences(toChange)
  File "SentenceChange_Read2Files_MASTER.py", line 68, in tokenize_sentences
    tokens = open('tmp/out.txt').read().split('\n')
FileNotFoundError: [Errno 2] No such file or directory: 'tmp/out.txt'

1 个答案:

答案 0 :(得分:1)

  

FileNotFoundError:[错误2]没有这样的文件或目录:'tmp / out.txt'

意味着没有文件tmp/out.txt 相对于运行脚本的目录。因此,当您运行Datasets/stanford-parser-full-2017-06-09/tokenize_sent.sh时,文件不是 >在./Datasets/stanford-parser-full-2017-06-09内而不是.内查找文件。

解决方案是cd进入所有路径都相对的目录,或者(更好)创建一个不依赖相对路径(或相对路径明确传递给每个脚本的位置)的解决方案),但这不在此答案的范围内。