程序退出后,Python 2.6打印不带换行符

时间:2018-07-04 00:23:28

标签: python python-2.x

在我的代码中,我尝试在程序退出后不换行地打印并再次打印。例如,我用逗号打印后:

type_d=dict.fromkeys(totals,[0,0])
for keysl in type_d.keys():
    print type_d[keysl][0] , ",", type_d[keysl][1] , ",",
print "HI" ,

但是当程序退出并且我调用另一个时,在文件中的最后一个值之后输入了换行符。如何避免这种情况?

2 个答案:

答案 0 :(得分:3)

我相信这没有记录,但是是有意的,并且与记录的行为有关。

如果您在文档中查找print

  

除非(输出系统认为)它位于行的开头,否则在(转换和)写入每个对象之前先写入一个空格。这种情况是(1)当尚未将任何字符写入标准输出时;(2)当写入标准输出的最后一个字符是除''以外的空白字符;或(3)在最后一次写入操作时标准输出不是印刷声明。 (因此,在某些情况下,可以将一个空字符串写入标准输出。)

Python会跟踪写入sys.stdout的最后一件事是否由print(包括print >>sys.stdout)(除非sys.stdout不是实际的)文件对象)。 (请参阅C API文档中的PyFile_SoftSpace。)这就是上面(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

如果您想查看负责的来源:

ceval中的PRINT_ITEM字节码处理程序是设置“软空间”标志的位置。

根据标志检查或不输出换行符的代码是Py_FlushLine(Python的其他许多部分也使用过)。

我相信,调用该检查的代码为handle_system_exit,但请注意,用于在同一文件中运行Python代码的各种不同的"Very High Level C API" functions最终也会做同样的事情。

答案 1 :(得分:0)

您可以尝试使用下面的代码,它将消除新行:

import sys
sys.stdout.write("HI")