首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python 2.7.4中,为什么命令不打印“\033[A”将光标上移1行?

在python 2.7.4中,为什么命令不打印“\033[A”将光标上移1行?
EN

Stack Overflow用户
提问于 2013-12-14 14:12:46
回答 2查看 2K关注 0票数 2

我的程序做了它应该做的事情,但它是一个小的messy.It,为每一个input.The生成一个新的行,平均输入量大约是1200。所以我有一个非常长的滚动输入。将所有输入放在同一行看起来会好得多。实际代码如下:

代码语言:javascript
复制
# new.py

import colorama
from colorama import init
init ()
import sys
final_line =[]
line_out=[]
lot_number=[]
number_drawn=[]
def load():    
    line_out=[]
    first=input("enter first lot #: ")
    last=input("enter last lot#: ")
    for lot_number in range(first,last):
        line_out.append(lot_number)
        for count in range(1,6):
            print(str(lot_number))," ",
            sys.stdout.write((str(count)))
            number_drawn=input("?: " )
            print "\033[A                   \033[A"   # I got this from someone posting 
            if count!=1:                              #a similar problem 
                while number_drawn <= line_out[count-1] or number_drawn>80:

                    print "error"
                    number_drawn=input("?: ")
            line_out.append(number_drawn)                              
        final_line.append(line_out)
        line_out=[]
load()

print(" "*8),
for n in range(1,41):
    print n,  

for a in final_line:    
    print"\n",
    print a[0],(" ")*5,
    if a[1]==1:        
        sys.stdout.write (str(a[1]))
    elif a[1]<10:
        sys.stdout.write(" "*(a[1]*2-2))
        sys.stdout.write(str(a[1]))
    else:
        if a[1]<41:
            d=(a[1]-10)                   
            sys.stdout.write(" "*(a[1]*2-2+d))
            sys.stdout.write( str(a[1]))    
    for b in range(2,6):                  

        if a[b]<10:                    
            m=(a[b]-a[b-1])*2 -1
            sys.stdout.write(" "*m)
            sys.stdout.write(str(a[b]))

        elif a[b] >9 and a[b-1]<10: 
            d=(10-a[b-1])*2-1 
            m=(a[b]-10)*3+d
            sys.stdout.write(" "*m)
            sys.stdout.write(str(a[b]))
        else:
            if a[b]<41:
                m= (a[b]-a[b-1])*3-2
                sys.stdout.write(" "*m)
                sys.stdout.write(str(a[b]))


def exp2():               
    print"\n"
    for x in range(1,4):            
        print " "*8,"x"*119
    print " "*8,    
    for n in range(41,81):
        print n,

    for k in final_line:
        print "\n",
        print k[0],(" ")*5,
        counter=1
        for q in range(1,6):            
            if k[q]==41:
                sys.stdout.write(str(k[q]))
                counter=2
            if k[q]>41 and counter==1:
                m=(k[q]-40)
                sys.stdout.write(" "*((k[q]-40)*3 -3))
                sys.stdout.write(str(k[q]))
                counter=2
            elif k[q]>41:    
                p=(k[q]- k[q-1])*3-2
                sys.stdout.write(" "*p)
                sys.stdout.write (str(k[q]))
exp2()            

输出是这样的:

代码语言:javascript
复制
enter first lot #: 1
enter last lot#: 4
1  1 ?: 1
[A                   [A
1  2 ?:                                      # I terminated the program myself

我尝试过各种变体(我发现"\b“会导致python打印一个空行,然后再打印一个换行符)。感谢那些向我展示了sys.stdout ()和print的人。这个程序没有它就不能工作

EN

回答 2

Stack Overflow用户

发布于 2013-12-14 14:31:57

问题不在于python,而在于shell如何解释control characters

如果您在shell中尝试以下任何命令(假设您在*nix平台上),您将观察到类似的行为(在您的python代码中观察到):

代码语言:javascript
复制
echo -e "\033[A foobar \033[A"

代码语言:javascript
复制
echo $'\x1b\x5b\x41 foobar \x1b\x5b\x41'
票数 0
EN

Stack Overflow用户

发布于 2013-12-14 17:25:24

问题不在于您的python代码。不同的终端具有不同的能力。终端的术语大写列出了它支持的所有转义序列。

ANSI终端应支持转义序列'\033[A‘。GNOME的终端和xterm也将支持它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20580286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档