当我从终端运行./fasttext
时,它运行良好。但是,当我使用subprocess.check_output('./fasttext')
进行尝试时,它会将错误视为。
错误
CalledProcessError
Traceback (most recent call last)
<ipython-input-11-a048dbef034f> in <module>()
1 from subprocess import check_output
2 from subprocess import call
----> 3 a1 = check_output('./fasttext')
4
5 #a = check_output('./fasttext print-sentence-vectors ~/Vaiju/Project/all code and data/My Code/TrainedModels/wiki_unigrams.bin < 1fasttext.test.txt')
/home/vaijenath/anaconda2/lib/python2.7/subprocess.pyc in check_output(*popenargs, **kwargs)
571 if cmd is None:
572 cmd = popenargs[0]
--> 573 raise CalledProcessError(retcode, cmd, output=output)
574 return output
575
CalledProcessError: Command './fasttext' returned non-zero exit status 1
我在笔记本中存在fasttext的同一目录。
答案 0 :(得分:1)
check_output
仅引发错误。您尝试运行的命令./fasttext
退出时为1,因为您没有遵循正确的使用模式。在终端中,它为您提供了一些文档但仍然以1退出,如果您不相信我(并且您不应该;))在终端中运行./fasttext; echo $?
,您将看到退出状态。
所以简单地使用以下内容:
a1 = check_output(['./fasttext', 'predict', <model>, <out>])
注意:
.decode("utf-8")
感兴趣.split("\n")
答案 1 :(得分:1)
解决。通过在调用中使用shell = True参数来解决该问题。
答案 2 :(得分:0)
您的真实用例应如下所示:
import subprocess
import os.path
a = subprocess.check_output([
'./fasttext',
'print-sentence-vectors',
os.path.expanduser('~/Vaiju/Project/all code and data/My Code/TrainedModels/wiki_unigrams.bin'),
], stdin=open('1fasttext.test.txt', 'r'))
请注意,每个参数都作为单独的列表成员传递;重定向是通过Python执行的(在这种情况下,使用stdin=
而不是<
重定向),并且像~
这样的扩展必须由Python完成(在这里,使用{{ 1}})。