900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python 在同一行打印_关于打印:Python:在同一行上打印多个

python 在同一行打印_关于打印:Python:在同一行上打印多个

时间:2018-11-02 09:50:42

相关推荐

python 在同一行打印_关于打印:Python:在同一行上打印多个

我想运行一个脚本,它基本上显示如下内容:

Installing XXX... [DONE]

现在,我使用print在函数成功后打印整行。但是,现在我希望它首先打印"installing xxx…",在函数运行之后,添加"done"标记;但是在同一行。

有什么想法吗?

如何防止python print添加换行符或空格的可能副本?

这个问题的答案没有提到,有时候你想清除行,请参见:/questions/45263205

您可以使用print语句来执行此操作,而无需导入sys。

def install_xxx():

print"Installing XXX... ",

install_xxx()

print"[DONE]"

print行末尾的逗号防止print发出新的行(您应该注意,输出末尾将有一个额外的空间)。

python 3解决方案由于上面的内容在python 3中不起作用,您可以这样做(同样,不导入sys):

def install_xxx():

print("Installing XXX... ", end="", flush=True)

install_xxx()

print("[DONE]")

print函数接受默认为"

"的end参数。将其设置为空字符串可防止它在行尾发出新行。

它工作得很好。到目前为止只看到过stdout解决方案。很高兴知道这一点。

如果您同时拥有打印和耗时的操作(所有操作都在同一功能/缩进级别),则此操作不起作用。在操作开始之前,根本没有输出,完成之后,输出显示为整体。

这可能更像是由操作系统为整个进程执行的输出缓冲的函数,而这不是特定于Python的问题。请参阅/questions/107705了解特定于python的解决方法。

如果没有换行符,可能需要显式刷新缓冲区。在python 3中使用print("...", end="", flush=True),在python 2中添加一个sys.stdout.flush()调用。

在python 3.x中,您需要在末尾添加一个"r",以替换打印行,而不是附加到它的末尾print("Progress: {}%".format(var), end="

", flush=True)。

如果要覆盖该行,则不要将end=""放在end="

"上,以便光标再次开始。或者在python 2中,将"

"附加到字符串中。注意离开克鲁夫特的短线。可能想用str.ljust(longest)填充。

为了防止有人偶然发现这一点:您还必须调整打印字符串的长度以适应终端线。否则,该线程中的任何方法都不会工作(至少在MacOS 10.13上不工作)。;)

您可以简单地使用:

print 'something',

...

print ' else',

输出将是

something else

不需要被import sys过度杀戮。注意末尾的逗号符号。

Python3+print("some string", end="");取下末尾的换行符。help(print);

你应该指出逗号

注意,使用此方法有两个空格

这是最简单和最有效的答案。

当打印参数在括号中时,此操作不起作用。此项工作:但此项工作无效

@这对帕伦斯夫妇很有用。打印("您好"),

在python 2和python 3中,print函数的语法稍有不同。

它在Python3.5+中是如何工作的?我试过print("..."),和print("...",)。两者都不起作用。

@cgfox print("string", end="");—阅读文件help(print);。

如果…是需要一段时间才能完成的功能,那么something在else打印之前不会打印。

您应该使用backspace'

'或('x08')char返回控制台输出中的上一个位置。

python 2+:

import time

import sys

def backspace(n):

sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back

for i in range(101): # for 0 to 100

s = str(i) + '%' # string for output

sys.stdout.write(s) # just print

sys.stdout.flush() # needed for flush when using \x08

backspace(len(s)) # back n chars

time.sleep(0.2) # sleep for 200ms

Python3:

import time

def backline():

print('

', end='') # use '

' to go back

for i in range(101): # for 0 to 100

s = str(i) + '%' # string for output

print(s, end='') # just print and flush

backline()# back to the beginning of line

time.sleep(0.2) # sleep for 200ms

此代码将在一行中从0%计数到100%。最终值为:

> python test.py

100%

这里是关于flush的其他信息:为什么包含'end='参数的python print语句在while循环中的行为不同?

为了澄清这一点,本例中注释掉的代码似乎是针对python 2的,而未注释的行是针对python 3的。

在python 3中,bouth行可以正常工作。如果使用'x08'作为退格,则需要刷新输出流-print((b'x08'*n).decode(),end='',flush=true)

在Linux上使用python 2.7是不可能的。:(

回车符'

'返回到行首,因此不需要'*n'

@bjnortier,右,纠正

该代码被修复为与Python2.7一起使用。

使用sys.stdout.write('Installing XXX... ')和sys.stdout.write('Done')。这样,如果您想重新创建打印功能,就必须用"

"手工添加新行。我想就为了这个可能没有必要使用诅咒。

谢谢!这个很好用。

我个人更喜欢这个解决方案,因为它在python2.x和python3.x上的工作方式完全相同,不需要依赖__future__进口或类似的东西。

所有的答案都没有对我起作用,因为它们都暂停了,直到遇到新的一行。我写了一个简单的助手:

def print_no_newline(string):

import sys

sys.stdout.write(string)

sys.stdout.flush()

要测试它:

import time

print_no_newline('hello ')

# Simulate a long task

time.sleep(2)

print('world')

"Hello"将首先打印出来,并在睡眠前刷新到屏幕上。之后,您可以使用标准打印。

谢谢您!正是我需要的,aka.flush()。

sys.stdout.write将不带回车打印。

import sys

sys.stdout.write("installing xxx")

sys.stdout.write(".")

/wiki/python_programming/input_and_output打印_,不带逗号或换行符

这个简单的例子将在同一行上打印1-10。

for i in range(1,11):

print (i, end="")

print有一个可选的结束参数,它是最后打印的。默认值是换行符,但可以将其更改为空字符串。打印("你好,世界!",结束=")

它给出语法错误

这是在Python3中。在python 2中,您可以简单地使用print 'something',。结尾的逗号防止添加换行符。

最简单的:Python3

print(‘

’+’something to be override’,end=‘’)

这意味着它会将光标返回到开始位置,而不是打印某个内容,并以同一行结束。如果在循环中,它将在开始的同一位置开始打印。

酷!也适用于Windows。

谢谢,这对我来说很好!不过,我认为print(’something to be override’, end=‘

’)更简单。

如果要覆盖上一行(而不是不断添加),可以在打印语句的末尾将与print(),合并。例如,

from time import sleep

for i in xrange(0, 10):

print("

{0}".format(i)),

sleep(.5)

print("...DONE!")

将计数0到9,替换控制台中的旧号码。"...DONE!"将与最后一个计数器9打印在同一行。

对于OP,这将允许控制台将安装完成百分比显示为"进度条",您可以在其中定义开始和结束字符位置,并更新中间的标记。

print("Installing |XXXXXX | 30%"),

以下是由@vadim-zin4uk从3.0版本派生的2.7兼容版本:

Python2

import time

for i in range(101): # for 0 to 100

s = str(i) + '%' # string for output

print '{0}

'.format(s), # just print and flush

time.sleep(0.2)

因此,提供的3.0解决方案看起来有点臃肿。例如,backspace方法没有使用integer参数,可能完全可以去掉它。

Python3

import time

for i in range(101): # for 0 to 100

s = str(i) + '%' # string for output

print('{0}

'.format(s), end='') # just print and flush

time.sleep(0.2) # sleep for 200ms

两者都经过测试和工作。

这是一个非常古老的线程,但这里有一个非常彻底的答案和示例代码。

是从ASCII字符集返回的回车的字符串表示。它与八进制015〔chr(0o15)、十六进制0d〔chr(0x0d)或十进制13〔chr(13)相同。关于无聊的阅读,请参阅man ascii。它(是一种相当可移植的表示方式,很容易让人们阅读。它非常简单地意味着在不推进纸张的情况下,将打字机上的托架移回起始位置。它是CRLF的CR部分,表示回车和换行。

print()是python 3中的一个函数。在python 2(任何您感兴趣使用的版本)中,通过从__future__模块导入其定义,可以将print强制为函数。print函数的好处是,您可以指定在结束时打印什么,从而覆盖的默认行为,以便在每个print()调用结束时打印新行。

sys.stdout.flush告诉python刷新标准输出的输出,除非另有说明,否则使用print()发送输出。您还可以通过使用python -u运行或设置环境变量PYTHONUNBUFFERED=1来获得相同的行为,从而跳过import sys和sys.stdout.flush()调用。通过这样做所获得的数量几乎为零,如果您很方便地忘记必须在应用程序正常运行之前完成这一步骤,那么就不容易调试。

还有一个样品。请注意,这在Python2或3中运行得很好。

from __future__ import print_function

import sys

import time

ANS = 42

FACTORS = {n for n in range(1, ANS + 1) if ANS % n == 0}

for i in range(1, ANS + 1):

if i in FACTORS:

print('

{0:d}'.format(i), end='')

sys.stdout.flush()

time.sleep(ANS / 100.0)

else:

print()

我觉得你的答案更适合:/questions/45263205/…

为了防止在数组中预先存储了值,可以使用以下格式调用这些值:

for i in range(0,n):

print arr[i],

我找到了这个解决方案,它正在开发python 2.7

# Working on Python 2.7 Linux

import time

import sys

def backspace(n):

print('

', end='') # use '

' to go back

for i in range(101): # for 0 to 100

s = str(i) + '%' # string for output

sys.stdout.write(string)

backspace(len(s)) # back for n chars

sys.stdout.flush()

time.sleep(0.2) # sleep for 200ms

对于python 2.7来说,print是不正确的语法,即使使用正确的语法,代码也不能正常工作。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。