0

私はpython 2.7.3を実行しており、osモジュールに関連するいくつかの基本的なことを行っています。

import os

def main():
    f= os.popen('cat  > out', 'w',1)
    os.write(f, 'hello pipe')
    os.close(f)

main()

私が見た例に基づいて、コードが機能することを期待しますが、インタープリターは次のエラーを返します:

Traceback (most recent call last):
  File "./test.py", line 11, in <module>
    main()
  File "./test.py", line 8, in main
    os.write(f, 'hello pipe')
TypeError: an integer is required

さて、ドキュメントに移りましょう。ヘルプページには次のように書かれています。

write(...)
    write(fd, string) -> byteswritten

    Write a string to a file descriptor.

fd はファイル記述子の略のようです。おそらく、これは次のようなことをすると得られるものです。

file = open('test.py')

当然のことながら、オンライン ドキュメントにもまったく同じことが書かれています。何が起きてる?

4

1 に答える 1

6

fileいいえ、「ファイル記述子」はオブジェクトではなく整数です。オブジェクトからファイル記述子に移動するfileには、 を呼び出しますfile.fileno()。ウィット:

>>> f = open("tmp.txt", "w")
>>> help(f.fileno)
Help on built-in function fileno:

fileno(...)
    fileno() -> integer "file descriptor".

    This is needed for lower-level file interfaces, such os.read().

>>> f.fileno()
4

ただし、それを使用する代わりに、何らかの理由で低レベル関数を本当に使用する必要がない限り、おそらく次のことを行いたいだけです。

f = os.popen('cat  > out', 'w',1)
f.write('hello pipe')
f.close()
于 2013-09-01T02:54:36.497 に答える