2011-08-19 37 views
-3

在我的Python脚本的开头我做的:的Python os.dup和副作用

if '-' in args: 
    fd = os.fdopen(os.dup(0)) 
    sys.stderr.write(fd.read()) 
    fd.close() 

我认为这不会影响我的程序的其余部分的行为,但它似乎,即如果我将这4行注释掉,我的代码就可以工作,但是如果它们被执行了,那么我的程序就会出现意想不到的结果

我是否正确使用os.dup?

谢谢。

+1

您的问题不完整,没有描述您在排除故障时遇到的“意外结果”。 –

+0

我以前见过这种模式!他试图在他的输入是什么,但没有“使用它”,然后在其余的程序可以读取它的情况下偷偷看看。我承认,在我自己的Unix青年中,我自己试过一次,然后才意识到文件描述符*和*实际文件*是两个完全不同的东西? :) –

回答

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()不会创建第二个实际的数据源。因此,无论您是第一个文件描述符还是第二个文件描述符,您都仍然“用完”输入流中的所有数据。