Python os.dup 和副作用
在我的Python脚本开始时,我做了以下操作:
if '-' in args:
fd = os.fdopen(os.dup(0))
sys.stderr.write(fd.read())
fd.close()
我原以为这不会影响我程序的其他部分,但似乎影响了。也就是说,如果我把这四行注释掉,我的代码就能正常工作;但如果这些代码被执行了,我的程序就会出现意想不到的结果(我现在很难找出问题所在)。
我是不是用错了os.dup?
谢谢。
2 个回答
0
我也不太确定os.dup()
的正确用法,不过针对你的例子,你可以这样做:
if '-' in args:
sys.stderr.write(sys.stdin.read())
或者甚至可以这样:
print(input()) # for python 2.x it would be print raw_input()
2
很遗憾,你没有正确使用 os.dup()
。显然,你想要“提前查看”标准输入流中的内容,看看里面有什么,然后把它打印出来,但接着让程序的其他部分继续运行,仍然能看到标准输入中等待的相同内容。(我猜测你这样做是为了调试吧?)
你这个方法的问题在于,运行 os.dup()
只是创建了一个第二个文件 描述符,并不是一个新的 文件。换句话说,它只是创建了另一个整数,让你可以引用输入数据的来源,但 dup()
并没有创建一个新的实际数据来源。所以无论你是从第一个文件描述符还是第二个文件描述符读取数据,你都已经“用完”了输入流中的所有数据。