4

これはリダイレクトされていない出力です(何であるかわからない場合moduleは、それほど重要ではありません)。

$ module help null

----------- Module Specific Help for 'null' -----------------------

        This module does absolutely nothing.
        It's meant simply as a place holder in your
        dot file initialization.

        Version 3.2.6

それをファイルにリダイレクトしたいとします。

$ module help null > aaa.txt 

----------- Module Specific Help for 'null' -----------------------

        This module does absolutely nothing.
        It's meant simply as a place holder in your
        dot file initialization.

        Version 3.2.6

$ cat aaa.txt
$

まあ、それは上にある必要がありますstderr

$ module help null 2> aaa.txt 
        This module does absolutely nothing.
        It's meant simply as a place holder in your
        dot file initialization.

        Version 3.2.6

$ cat aaa.txt 

----------- Module Specific Help for 'null' -----------------------
$

おい!リダイレクトをリセットしています。これは本当に迷惑です、そして私は2つの質問があります:

  1. どうすれば私が望むものを達成できますか、つまりすべてをファイルにリダイレクトします
  2. なぜ彼らはそんな奇妙なことをしているのですか?

この関連する質問も参照してください。

編集:誰かがコメントで尋ねたので、いくつかの詳細。これは、AIX5.3の64ビットです。私はPython2.6.5をほぼ完全に利用できます。gcc4.1.1とgcc4.5.1の両方がありますが、それらをリンクするライブラリは多くありません(回答に記載されているスクリプトバージョンを含むutil-linux-ngライブラリは、getopt部分のコンパイルに失敗します)。また、IBMXLコンパイラーxlcのいくつかのバージョンがあります。私が最初に指定しなかった理由は、外部プログラムではなく、おそらくexecを使用して、いくつかのシェルトリックを期待していたためです。

4

3 に答える 3

6

これを試して:

script -q -c 'module help null' /dev/null > aaa.txt

これは、シェルスクリプトで(非対話的に)使用して機能します

$ script --version
script (util-linux-ng 2.16)

も使用できる場合がありますexpect

/ dev/ttyへの直接リダイレクトをキャッチするも参照してください。

于 2010-10-30T00:06:49.750 に答える
2

私は最初に2番目の質問に答えています:設計の選択として、モジュールは評価であり、設計の側面を簡単に保つために、stdout/stderrの代わりにstderr/ttyを使用するという(疑わしい)選択をしました。ここを参照してください。

私の解決策は、他の推奨ツール(スクリプト、expectなど)を使用できなかったため、次のpythonミニラッパーです。

import pty, os

pid, fd = pty.fork()
if pid == 0: # In the child process execute another command
    os.execv('./my-progr', [''])
    print "Execv never returns :-)"
else:
    while True:
        try:
            print os.read(fd,65536),
        except OSError:
            break
于 2010-11-01T21:42:49.963 に答える
0

moduleに書き込んでいるように見え/dev/ttyます。これは常にプロセスに関連付けられているコンソールです。もしそうなら、私はあなたがそれについて何もできないと思います。通常、これは、その人にメッセージが表示されることを保証するために行われます(プログラムがインタラクティブに呼び出されたと仮定します)。

于 2010-10-29T21:42:26.793 に答える