7

このサンプル python コードを検討してください。stdin から読み取り、ファイルに書き込みます。

import sys

arg1 = sys.argv[1]

f = open(arg1,'w')
f.write('<html><head><title></title></head><body>')

for line in sys.stdin:
    f.write("<p>")
    f.write(line)
    f.write("</p>")

f.write("</body></html>")
f.close() 

この同じプログラムを変更して、代わりに stdout に書き込むとします。f.write()次に、 の各インスタンスをに置き換える必要がありますsys.stdout.write()。しかし、それは退屈すぎるでしょう。fのエイリアスとして指定する方法があれば知りたいsys.stdoutので、それf.write()は として扱われsys.stdout.write()ます。

4

4 に答える 4

15

Python の名前は単なるバインディングです。したがって:

f = sys.stdout

バインドされているオブジェクトに名前fバインドするだけです...sys.stdout

fこれらは両方とも同じオブジェクトであるため、またはsys.stdoutこの時点で行う変更は両方に影響することに注意してください...したがってf.close()、通常はやりたくないことをしないでくださいsys.stdout.close()...

于 2013-07-23T18:50:18.757 に答える
11

やるだけ

>>> import sys
>>> f = sys.stdout
>>> f.write('abc')
abc

代わりf = sys.stdoutf = open(fileName). (そして削除f.close()

また、ファイルには次の構文を使用することを検討してください。

with open(fileName, 'r') as f:
    # Do Something

このようにして、ファイルは自動的に閉じられます。

于 2013-07-23T18:46:12.373 に答える
3

はい、Python では、すべてのクラス / 関数 / メソッドなどにエイリアスを設定できます。使用する値を別の変数に割り当てるだけです。

import sys
f = sys.stdout

これで、呼び出したすべてのメソッドが呼び出されfますsys.stdout。これは、好きなもので行うことができます。たとえば、i = sys.stdinなどでも可能です。

于 2013-07-23T18:47:32.580 に答える
0

とにかく、これはシェルの仕事です。>filename標準出力に送信し、スクリプトを呼び出すときに使用してファイルにリダイレクトするだけです。

于 2013-07-23T19:16:17.193 に答える