python - 程序退出后没有换行符的 Python 2.6 打印
问题描述
在我的代码中,我试图在程序退出后不换行打印并再次打印。例如,我用逗号打印:
type_d=dict.fromkeys(totals,[0,0])
for keysl in type_d.keys():
print type_d[keysl][0] , ",", type_d[keysl][1] , ",",
print "HI" ,
但是当程序退出并且我调用另一个程序时,在文件中的最后一个值之后输入了一个换行符。我怎样才能避免这种情况?
解决方案
我相信这没有记录,但它是故意的,并且与记录的行为有关。
print
如果您在文档中查找:
在每个对象被(转换和)写入之前写入一个空格,除非输出系统认为它位于行首。情况如下:(1) 尚未将字符写入标准输出,(2) 写入标准输出的最后一个字符是除 ' ' 之外的空白字符,或 (3)标准输出上的最后一个写入操作是不是打印声明。(在某些情况下,出于这个原因,将空字符串写入标准输出可能会起作用。)
Python 确实会跟踪最后写入的内容是否sys.stdout
由print
(包括 by print >>sys.stdout
)写入(除非sys.stdout
不是实际的文件对象)。(请参阅PyFile_SoftSpace
C API 文档。)上面的 (3) 就是这样。
它也是用来决定是否在关闭时打印换行符的stdout
。
因此,如果您不希望最后换行,您可以在程序末尾执行 (3) 中提到的相同解决方法:
for i in range(10):
print i,
print 'Hi',
sys.stdout.write('')
现在,当你运行它时:
$ python hi.py && python hi.py
0 1 2 3 4 5 6 7 8 9 Hi0 1 2 3 4 5 6 7 8 9 Hi
如果您想查看负责的来源:
PRINT_ITEM
字节码处理程序ceval
是设置“软空间”标志的地方。
根据标志检查和输出换行符的代码是Py_FlushLine
(Python的许多其他部分也使用它)。
我相信,调用该检查的代码是handle_system_exit
——但请注意,用于在同一文件中运行 Python 代码的各种不同的“非常高级 C API”函数最后也会做同样的事情。
推荐阅读
- wpf - F# FsXaml:哪些控件支持哪些事件?
- swift - 使用 Alamofire 上传图片,Swift 3
- php - 为什么这个变量 eloquent 方法有效,我如何传递 args?
- python - Lambda 表达式和字符串
- database - 用于大型媒体嵌套元数据查询的最快 AWS DB 服务
- c - if/else if 语句中的条件格式是否必须在 C 中匹配?
- c# - Cancel all Task.Run executing particular method
- javascript - 在嵌套数组中查找项目的索引
- bonita - 如何使用表单的一个字段填充 Bonita 中的其他字段?
- html - 如何使用 curl 手动登录 HG 路由器?