Python os.dup和副作用

时间:2011-08-19 00:23:39

标签: python linux system pipe

在我的python脚本开头,我做了:

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

我认为这不会影响我程序的其他部分的行为,但似乎是,即如果我注释掉这4行我的代码可以工作,但如果它们被执行那么我的程序有意想不到的结果(我'我很难排除故障。)

我是否错误地使用了os.dup?

感谢。

2 个答案:

答案 0 :(得分:2)

唉,你不能正确使用os.dup()。显然,您希望在标准输入流中“向前看”以查看将存在的内容并将其打印出来,然后让程序的其余部分启动并看到仍在那里等待标准输入的相同输入。 (我的猜测是正确的,你这样做是为了调试目的吗?)

您的方法存在的问题是,运行os.dup()只会创建第二个文件描述符,而不是第二个文件 - 换句话说,它会创建另一个整数您可以使用它来引用输入数据的来源,但dup()不会创建第二个实际的数据源。因此,无论您是第一个文件描述符中的read()还是第二个文件描述符,您仍然“已用完”输入流中的所有数据。

答案 1 :(得分:0)

我也不确定os.dup()的正确使用方法,但对于您的例子,您可以这样做

if '-' in args:
    sys.stderr.write(sys.stdin.read())

甚至

    print(input())  # for python 2.x it would be print raw_input()