2012-11-08 45 views
0

我想从Python运行一个C程序与子进程模块,捕获其变量输出。代码看起来是这样的:Python:subprocess.communicate():ValueError与打印()函数,但不是“打印”内置

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

上面的代码工作 - result被示为myprog的标准输出输出和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 

我在这里完全难倒,我甚至不知道从哪里开始试图解释这个!当然,我的程序无论如何都适用,但我真的很想知道为什么会发生这种情况,并希望这会是一个有趣的问题。

+0

请你向我们展示了整个Python和整个C程序? – User

回答

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