2012-10-07 39 views
2

即時通訊運行的Linux,我想導入一些手冊頁到我的應用程序。如何獲取Python中的手冊頁內容?

我想出了這個:

p = subprocess.Popen(('man %s' % manTopic,), shell = True, stdout = subprocess.PIPE) 
stdout, stderr = p.communicate() 
if stdout: 

但它沒有好,人是隻顯示第一頁和塊我applicationon

我怎樣才能獲得男人頁與Python?

+1

格式化怎麼樣?你需要保留它還是需要剝離? –

回答

3

嘗試:

p = subprocess.Popen(('man -P cat %s' % manTopic,), shell = True) 
stdout, stderr = p.communicate() 
if stdout: 

代替 - 了 「-P」 選項覆蓋由 「人」 命令中使用的尋呼機程序。

7

您可以通過check_output獲取命令的整個輸出。此外,使用外殼並不是必需的,甚至可能使您的應用程序容易受到shell injection attack,並且是strongly discouraged

import subprocess 

pagename = 'man' 
manpage = subprocess.check_output(['man', pagename]) 

請注意,使用man將爲您提供格式化爲終端的輸出。如果你想擁有它的格式不同,你必須

  • 呼叫man -w <name>拿到手冊頁的位置,
  • 大概解壓手冊,
  • 使用-T選項飼料它groff選擇你想要的輸出類型。

當調用groff時,不要忘記加載正確的宏。

在FreeBSD上,我傾向於使用groff -Tlatin1 -mandoc <file>來獲取文本輸出。

+0

+1用於處理格式化和提及'groff -T ...',並使用'man -w'讓'man'進行查找並返回路徑,然後自己處理它。 –

+0

呵呵,當然還有提及'shell = True'的安全含義。我的+3按鈕在哪裏? –

+0

我使用Python 2.6沒有subprocess.check_output():] – BPS