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 回答