3

Linux を実行していて、いくつかの man ページをアプリケーションにインポートしたいと考えています。

私はこれを思いつきました:

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

しかし、それは良くありません。男性は最初のページのみを表示し、アプリケーションをブロックします

Python で man ページを取得するにはどうすればよいですか?

4

2 に答える 2

9

を使用して、コマンドの出力全体を取得できますcheck_output。さらに、シェルを使用する必要はなく、アプリケーションがシェル インジェクション攻撃に対して脆弱になる可能性さえあるため、使用しないことを強くお勧めします。

import subprocess

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

manusing を使用すると、端末用にフォーマットされた出力が得られることに注意してください。別の形式にしたい場合は、次のようにする必要があります

  • 呼び出しman -w <name>てマンページの場所を取得し、
  • おそらくマニュアルページを解凍し、
  • オプションをgroff使用して、-T必要な出力のタイプを選択します。

を呼び出すときgroffは、正しいマクロをロードすることを忘れないでください。

groff -Tlatin1 -mandoc <file>FreeBSD では、テキスト出力を取得するために使用する傾向があります。

于 2012-10-07T12:46:03.240 に答える
3

試す:

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

代わりに -- 「-P」オプションは、「man」コマンドで使用されるページャー プログラムをオーバーライドします。

于 2012-10-07T12:44:11.953 に答える