Python将自定义用户输入导出到文件

时间:2015-10-21 13:56:53

标签: python input

首先要做的事情:我在终端使用带有python 2.7.5的Raspberry pi(Raspbian)(使用nano)。

我已经在网上冲浪了几天,试图找到我的问题的答案。

我有一个条形码扫描仪连接到我的'pi',我正在尝试导出打印命令加上我的条形码和用户在扫描条形码后输入的其他信息,这里是我现在卡住的地方。我试过像这样运行文件:

sudo python inputdevice.py >> output.txt

但问题是终端没有显示任何内容。它输出到output.txt。但我希望它出现在我的终端中,以便其他人可以轻松使用它。它应该打印:'扫描仪已连接!'然后'请立即扫描条形码'。这也意味着当我添加另一行打印:'请提供额外信息'然后打开换行符,让用户输入目的地的日期和地址等内容。他们看不到它。

只是为了清理:一旦启动:'sudo python inputdevice.py> output.txt的。 你只看到开放空间,你可以输入并按下回车后输出'请扫描条形码' - > [output.txt]文件中的[条形码]等。我希望有人能够回答我的问题。 (我甚至不确定这是否可行。

非常感谢, - 最大

from evdev import InputDevice, ecodes, list_devices, categorize
from select import select
import signal, sys
import os.path
import sys
import subprocess

keys = {
    # Scancode: ASCIICode
    0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8',
    10: u'9', 11: u'0', 12: u'-', 13: u'=', 14: u'BKSP', 15: u'TAB', 16: u'Q', 17: u'W', 18: u'E', 19: u'R',
    20: u'T', 21: u'Y', 22: u'U', 23: u'I', 24: u'O', 25: u'P', 26: u'[', 27: u']', 28: u' ', 29: u' ',
    30: u'A', 31: u'S', 32: u'D', 33: u'F', 34: u'G', 35: u'H', 36: u' ', 37: u'K', 38: u'L', 39: u';',
    40: u'"', 41: u'`', 42: u'LSHFT', 43: u'\\', 44: u'Z', 45: u'X', 46: u'C', 47: u'V', 48: u'B', 49: u'N',
    50: u'M', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 100: u'RALT'
}


if not os.path.exists('/dev/input/by-id/usb-040b_6543-if01-event-kbd'):  #this is the scanners ID
        print "Scanner isn't connected ;("
        exit()    #if scaner not connected then exit
else:
        print "Scanner is connected! :)"
        print "Please scan barcode now"

def signal_handler(signal, frame):
    print '   Stopping Module'
    dev.ungrab()
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

dev = InputDevice("/dev/input/by-id/usb-040b_6543-if01-event-kbd")

dev.grab()

barcode = ""
for event in dev.read_loop():
    if event.type == ecodes.EV_KEY:
        data = categorize(event)
        if data.keystate == 1 and data.scancode != 42: # Catch only keydown, and not Enter
            if data.scancode == 28:
                if barcode.startswith("   "):
                        print "Your input is:"
                        print barcode[3:]
                else:
                        print "Your input is:"
                        print barcode
                barcode = ""
        else:
                barcode += keys[data.scancode]

1 个答案:

答案 0 :(得分:1)

我认为你应该使用某种记录器。 Python有https://docs.python.org/2/library/logging.html之类的东西。此模块应解决您的日志记录问题。而且我认为这是最好的主意。

..或者你可以使用

python script.py | tee output.txt

哪个可以解决你的问题:)