2016-12-11 26 views
0

我想用python使用SENNA。我得到以下IOErrorIOError与子进程

Traceback (most recent call last): 
    File "C:\Python27\senna_test.py", line 18, in <module> 
    tagged = StringIO(p.communicate(sentence)[0]) 
    File "C:\Python27\lib\subprocess.py", line 479, in communicate 
    return self._communicate(input) 
    File "C:\Python27\lib\subprocess.py", line 718, in _communicate 
    self.stdin.write(input) 
IOError: [Errno 22] Invalid argument 

我的代码如下:

import os 
import csv 
from StringIO import StringIO 
import subprocess as sp 
from nltk.draw.tree import Tree, TreeWidget 
from nltk.draw.util import CanvasFrame 

senna_path="C:/Python27/senna/" 
sentence = 'My brother has a dog' 

# read senna output 
p = sp.Popen(['blabla', '-path', senna_path], 
      executable=os.path.join(senna_path, 'senna-win32.exe'), 
      stdin=sp.PIPE, 
      stdout=sp.PIPE, 
      stderr=sp.PIPE) 
tagged = StringIO(p.communicate(sentence)[0]) 
table = csv.reader(tagged, dialect='excel-tab') 
+1

你有没有试过''我的兄弟有一只狗\ n''?另外,为什么不是你的命令'['senna-Win32.exe','-path',senna_path]'?你能解释一下'blabla'和可执行的参数吗? – Gribouillis

+0

嗨,我正在尝试使用以下github代码:https://gist.github.com/dedan/1275662 – Anu

+0

然后,也许该要点的作者有答案。传递给'sp.Popen()'的命令是一个在Cmd控制台中工作的命令。打开cmd控制台并调用senna程序,直到它适用于您的例句。一旦有效,它将在'sp.Popen()'中起作用。 – Gribouillis

回答

0

相反,你可以,如果你使用的是Windows,然后用这个办法

下载塞纳https://ronan.collobert.com/senna/download.html

python run .exe app with argument

使用番泻叶-win32.exe直接

import subprocess 
myinput = open('in.txt') 
myoutput = open('out.txt', 'w') 
p = subprocess.Popen('senna-win32.exe', stdin=myinput, stdout=myoutput) 
p.wait() 
myoutput.flush() 

现在解析out.txt才能给你结果。