1

当我./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 位于同一目录中。

4

3 回答 3

1

check_output仅当退出状态不为 0 时才会引发错误。您尝试运行的命令./fasttext以 1 退出,因为您没有遵循正确的使用模式。在终端中,它会为您提供一些文档,但仍然以 1 退出,如果您不相信我(而且您不应该;))./fasttext; echo $?在终端中运行,您将看到退出状态。

所以只需使用类似的东西: a1 = check_output(['./fasttext', 'predict', <model>, <out>])

备注:

  • 检查输出返回一个字节。您可能有兴趣,.decode("utf-8")以便.split("\n")
  • Facebook 现在有一个非常简单的 python包装器
于 2017-12-01T03:50:25.580 回答
1

解决。通过在调用中使用 shell=True 参数解决了该问题。

于 2017-12-01T18:07:15.420 回答
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=而不是<重定向),并且替换扩展 like~必须由 Python 完成(如这里,用os.path.expanduser())。

于 2017-12-01T18:34:00.790 回答