「print arg,」は改行を出力しないけど半角空白は出力されるよ

test.py:

print 'foo',
print 123,
print 'bar'


実行結果:

$ python test.py
foo 123 bar


というわけで、print 文の最後にカンマ "," をつけた場合、それは「改行を出力しない」んじゃなくて、「改行のかわりに半角空白を出力する」という意味でした。

そんなわけで、

print "Content-Type: image/png\r\n",
print "Content-Length: %d\r\n" % len(image),
print "\r\n",
print image,

はうまくいかなくて

import sys
write = sys.stdout.write
write("Content-Type: image/png\r\n")
write("Content-Length: %d\r\n" % len(image))
write("\r\n")
write(image)

はうまくいきましたとさ。
やっぱり print 文の仕様は余計なおせわだ。


ところで、コマンドラインで「python -c 'print 1, 2, 3,'」を実行すると、最後に改行が出力されるんだけど、これはなぜ?

$ python -c 'print 1, 2, 3,'
1 2 3
$ python -c 'print 1, 2, 3,' | ruby -e 'p ARGF.read'
"1 2 3\n"

謎だ。