Python:subprocess.communicate():带有print()函数的ValueError,但不是内置的“print”

时间:2012-11-08 12:37:06

标签: python printing subprocess popen

我正在尝试使用子进程模块从Python运行C程序,在变量中捕获其输出。代码如下所示:

process = Popen(["myprog", str(length), filename], stdout=PIPE, stderr=PIPE)
#wait for the process
result = process.communicate()
end=time()
print result

上面的代码有效 - result显示为myprog的stdout输出和stderr输出(作为字符串)的2元组。

... 然而如果我将print result更改为print(result) ...

Traceback (most recent call last):
  File "tests.py", line 26, in <module>
    print(result)
ValueError: I/O operation on closed file

我完全被困在这里,我甚至不知道从哪里开始尝试解释这个!当然,我的程序无论如何都有用,但我真的很想知道为什么会这样,希望这将是一个有趣的问题。

1 个答案:

答案 0 :(得分:4)

这是不是 Python问题。你有myprog的问题,而不是Python。

在Python 2中,print somethingprint(something)之间的差异为空且无效。完全没有没有的区别,因为Python编译器将括号视为无操作,结果字节代码完全相同:

>>> import dis
>>> def foo(): print 'bar'
... 
>>> dis.dis(foo)
  1           0 LOAD_CONST               1 ('bar')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE        
>>> def foo(): print('bar')
... 
>>> dis.dis(foo)
  1           0 LOAD_CONST               1 ('bar')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE