2016-12-11 62 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才能給你結果。