0

我正在尝试使用 subprocess 模块从 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's stdout 输出和 stderr 输出(作为字符串)的 2 元组。

...但是,如果我更改print resultprint(result)...

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

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

4

1 回答 1

4

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

print something在 Python 2 中,和之间的区别print(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        
于 2012-11-08T12:45:02.783 回答