簡體   English   中英

通過ansible劇本在python終端中運行命令

[英]Run commands in the python terminal through ansible playbook

我是ansible的新手,但是我正在嘗試通過ansible劇本在python終端中運行一些命令。 具體來說,我想下載一個語料庫。

$python
>import nltk
>nltk.download
> ~ d (download)
> ~ book
> ~ q (quit)
>quit()

當前,我的劇本文件創建了一個virtualenv,它通過requirements.txt安裝nltk,但是我不知道如何在不手動下載的情況下獲取特定的nltk功能。

我在搜索python -m nltk.downloader all碰到了這一行, python -m nltk.downloader all這些都可以滿足我的程序的要求,但這是許多不必要的東西的下載,占用了內存。 但是,與此同時,我確實通過運行來進行嘗試:

- name: Get the nltk corpus
  shell: "python -m nltk.downloader all"

但這與消息錯誤:

TASK [Get the nltk corpus]*****************************************************
fatal: [127.0.0.1]: FAILED! => {"changed": true, "cmd": "python -m nltk.downloader book", "delta": "0:00:00.016227", "end": "2016-12-29 20:06:09.156953", "failed": true, "rc": 1, "start": "2016-12-29 20:06:09.140726", "stderr": "/usr/bin/python: No module named nltk", "stdout": "", "stdout_lines": [], "warnings": []}

關於如何使上述代碼或通過ansible獲得特定nltk功能以實現我的目標的其他方法有任何建議嗎?


更新

為了更清楚一點,我正在嘗試運行一個命令,該命令在ansible劇本中的sell之外的python shell中可以正常工作。

例如,行nltk.download("book")完全可以在python終端中按我需要的方式工作。 但是我需要運行此程序,而無需手動輸入終端並通過ansible劇本中的一項任務。

我已經嘗試過類似的方法,盡管它可以編譯,但實際上並沒有下載所需的書集。

- name: Get the "book" nltk corpus
  shell: "/usr/local/venv/bin/python -m nltk.downloader book"

文檔源代碼提示,您可以下載各個模塊:

可以通過使用單個參數調用download()函數來下載單個軟件包,並給出應下載軟件包的軟件包標識符。

如果在您的示例中book是一個包裝(我對NLTK不熟悉),請嘗試:

- name: Get the nltk corpus
  shell: "python -m nltk.downloader book"

命令nltk.download()用於下載nltk 數據 :諸如POS標記器之類的語料庫和經過訓練的模型。 要使用它,您必須已經安裝了nltk代碼,即,您必須能夠成功運行import nltk 您說您正在使用nltk模塊可用的virtualenv中運行,但是您的錯誤消息提出了其他建議: /usr/bin/python: No module named nltk 如果這是真正的問題,那么您首先需要解決(和/或糾正您的問題)。

假設您可以啟動Python以使import nltk語句成功執行,則可以下載一個語料庫(您指定的目標),例如,為Brown語料庫下載nltk.import("brown") (當然,這必須在import nltk之后運行。)要下載NLTK書中提到的所有資源,請使用nltk.import("book")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM