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

上記のコードは動作します -の stdout 出力と stderr 出力 (文字列として) のresult2 タプルとして表示されます。myprog

...しかし、私がに変更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

私はここで完全に困惑しています。これをどこから説明しようとしているのかさえわかりません! もちろん、私のプログラムはとにかく動作しますが、なぜそうなったのか知りたいですし、興味深い質問になることを願っています.

4

1 に答える 1

4

これはPython の問題ではありません。myprogPython ではなくに問題があります。

print somethingPython 2 では、との違いprint(something)は null と void です。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 に答える