)]}'
{"doc/source/conf.py":[{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"91a7c84134fa0612ed1eaf56c931c4e71b715484","unresolved":false,"context_lines":[{"line_number":116,"context_line":"# If not \u0027\u0027, a \u0027Last updated on:\u0027 timestamp is inserted at every page bottom,"},{"line_number":117,"context_line":"# using the given strftime format."},{"line_number":118,"context_line":"git_cmd \u003d \"git log --pretty\u003dformat:\u0027%ad, commit %h\u0027 --date\u003dlocal -n1\""},{"line_number":119,"context_line":"html_last_updated_fmt \u003d os.popen(git_cmd).read().decode(\u0027utf-8\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"# If true, SmartyPants will be used to convert quotes and dashes to"},{"line_number":122,"context_line":"# typographically correct entities."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_3e55fb1d","line":119,"updated":"2017-06-23 16:59:10.000000000","message":"Actually I am not sure:\n\n    Python 3.6.1\n    \u003e\u003e\u003e p \u003d os.popen(\u0027ls\u0027)\n    \u003e\u003e\u003e out \u003d p.read()\n    \u003e\u003e\u003e type(out)\n    \u003cclass \u0027str\u0027\u003e","commit_id":"e5a4e0ea4fda9e311171e0a5d42e9fc8d00e5d83"},{"author":{"_account_id":14288,"name":"Matthew Thode","display_name":"prometheanfire","email":"mthode@mthode.org","username":"prometheanfire"},"change_message_id":"6d7f862891e12680be2594c4d5b0c797ed8e2a20","unresolved":false,"context_lines":[{"line_number":116,"context_line":"# If not \u0027\u0027, a \u0027Last updated on:\u0027 timestamp is inserted at every page bottom,"},{"line_number":117,"context_line":"# using the given strftime format."},{"line_number":118,"context_line":"git_cmd \u003d \"git log --pretty\u003dformat:\u0027%ad, commit %h\u0027 --date\u003dlocal -n1\""},{"line_number":119,"context_line":"html_last_updated_fmt \u003d os.popen(git_cmd).read().decode(\u0027utf-8\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"# If true, SmartyPants will be used to convert quotes and dashes to"},{"line_number":122,"context_line":"# typographically correct entities."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_f1021109","line":119,"updated":"2017-06-23 20:55:01.000000000","message":"In python 3.4 I get the following\n\n\u003e\u003e\u003e import subprocess\n\u003e\u003e\u003e p \u003d subprocess.Popen(\u0027/bin/ls\u0027, stdout\u003dsubprocess.PIPE)\n\u003e\u003e\u003e p.stdout.read()\nb\u0027file1\\nfile2\\n\u0027\n\nI think the behavior changed at some point in the 3.x releases.  In any case I think this is a good change and the worst it could do is pass it through an additional decode. (tested in py2.7 and 3.4)","commit_id":"e5a4e0ea4fda9e311171e0a5d42e9fc8d00e5d83"},{"author":{"_account_id":19737,"name":"huayue","email":"huayuev5@gmail.com","username":"huayue"},"change_message_id":"04e16444da7a44776b2cc2192d9a9adbdddb4348","unresolved":false,"context_lines":[{"line_number":116,"context_line":"# If not \u0027\u0027, a \u0027Last updated on:\u0027 timestamp is inserted at every page bottom,"},{"line_number":117,"context_line":"# using the given strftime format."},{"line_number":118,"context_line":"git_cmd \u003d \"git log --pretty\u003dformat:\u0027%ad, commit %h\u0027 --date\u003dlocal -n1\""},{"line_number":119,"context_line":"html_last_updated_fmt \u003d os.popen(git_cmd).read().decode(\u0027utf-8\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"# If true, SmartyPants will be used to convert quotes and dashes to"},{"line_number":122,"context_line":"# typographically correct entities."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_84c15e83","line":119,"in_reply_to":"5f201791_3e55fb1d","updated":"2017-06-23 17:56:24.000000000","message":"Subprocess.Popen will return byte string type, but os.popen does not. I am not sure this commit is necessary now. Maybe utf-8 type is better.","commit_id":"e5a4e0ea4fda9e311171e0a5d42e9fc8d00e5d83"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"561ca6ab0279ed01781b51ce82cabb189962d743","unresolved":false,"context_lines":[{"line_number":116,"context_line":"# If not \u0027\u0027, a \u0027Last updated on:\u0027 timestamp is inserted at every page bottom,"},{"line_number":117,"context_line":"# using the given strftime format."},{"line_number":118,"context_line":"git_cmd \u003d \"git log --pretty\u003dformat:\u0027%ad, commit %h\u0027 --date\u003dlocal -n1\""},{"line_number":119,"context_line":"html_last_updated_fmt \u003d os.popen(git_cmd).read().decode(\u0027utf-8\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"# If true, SmartyPants will be used to convert quotes and dashes to"},{"line_number":122,"context_line":"# typographically correct entities."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_b15a5927","line":119,"in_reply_to":"5f201791_f1021109","updated":"2017-06-23 21:03:16.000000000","message":"But this is `os` no `subprocess`. Internally `os.popen()` is using the one for `subprocess`:\n\nhttps://github.com/python/cpython/blob/3.6/Lib/os.py#L985\n\nBut as you can see is wrapper into io.TextIOWrapper.","commit_id":"e5a4e0ea4fda9e311171e0a5d42e9fc8d00e5d83"}]}
