2012-11-08 2 views
0

파이썬에서 서브 프로세스 모듈과 함께 C 프로그램을 실행하여 변수에 출력을 캡처하려고합니다. 이 코드는 다음과 같다 :Python : subprocess.communicate() : print() 함수가 있지만 print가 내장되어 있지 않은 ValueError

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

상기 코드는 작동 - resultmyprog의 표준 출력과 출력이 문자열로 열려진 출력 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 

내가 완전히 여기 난처한 상황에 빠진거야, 나는 심지어 이것을 설명하려고 어디서부터 시작 모르겠어요! 물론, 제 프로그램은 어쨌든 작동하지만, 저는 그것이 실제로 일어난 이유를 알고 싶습니다. 그리고 흥미로운 질문이되기를 바랍니다.

+0

당신이 우리에게 전체 파이썬과 모든 C 프로그램을 보여 주시겠습니까 : 파이썬 컴파일러가없는 연산과 괄호를보고 결과 바이트 코드가 동일하기 때문에 모든 차이가 없습니다 ? – User

답변

4

이것은 이 아니며 파이썬 문제입니다. 파이썬이 아니라 myprog에 문제가 있습니다.

파이썬 2에서 print somethingprint(something)의 차이는 null이며 무효입니다.

>>> 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   
관련 문제