Python程序:如何从终端获取击键?

时间:2015-01-06 05:17:01

标签: python

我正在编写一个Python脚本,从Ubuntu终端运行,它以某种格式接收命令并为我完成任务。这意味着脚本打印"> "并读取命令,执行它,然后返回到开头。我想要一个实现一个功能,其中按向上箭头导致上一个命令出现在我的命令行上,类似于bash命令行。我该如何实现呢?

2 个答案:

答案 0 :(得分:0)

它被称为历史。你可能应该找到像GNU readline

这样的rl绑定

答案 1 :(得分:0)

除了Basile Starynkevitch提到的rl模块外,还有标准模块readline。如果您将readline导入到脚本中,则会自动进行行编辑&在Python 2中使用input()raw_input()或在Python 3中使用input()时的历史记录。

这是一个快速的Python 2演示程序,它执行Caesar encryption

#! /usr/bin/env python

''' Simple Caesar encryption / decryption of stdio

    Gets shift from command line; default is ROT13

    Written by PM 2Ring 2012.12.01
'''

import sys, readline

lobase = ord('a')
hibase = ord('A')

def rot(c, delta):
    if c.isalpha(): 
        base = lobase if c.islower() else hibase
        c = chr(base + (ord(c) - base + delta) % 26)
    return c

def main():
    delta = int(sys.argv[1]) if len(sys.argv) > 1 else 13

    while True:
        try:
            s = raw_input()
            print ''.join(rot(c, delta) for c in s)
        except EOFError:
            break

if __name__ == '__main__':
    main()