0

我有一个 python 脚本,但我想添加更多行。我该怎么做呢?

#!/usr/bin/env python
# Display a runtext with double-buffering.
from samplebase import SampleBase
from rgbmatrix import graphics
import time


class RunText(SampleBase):
    def __init__(self, *args, **kwargs):
        super(RunText, self).__init__(*args, **kwargs)
        self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="I love you!")

    def run(self):
        offscreen_canvas = self.matrix.CreateFrameCanvas()
        font = graphics.Font()
        font.LoadFont("../../../fonts/7x13.bdf")
        textColor = graphics.Color(255, 255, 0)
        pos = offscreen_canvas.width
        my_text = self.args.text

        while True:
            offscreen_canvas.Clear()
            len = graphics.DrawText(offscreen_canvas, font, pos, 10, textColor, my_text)
            pos -= 1
            if (pos + len < 0):
                pos = offscreen_canvas.width

            time.sleep(0.05)
            offscreen_canvas = self.matrix.SwapOnVSync(offscreen_canvas)


# Main function
if __name__ == "__main__":
    run_text = RunText()
    if (not run_text.process()):
        run_text.print_help()

我尝试添加另一个self.parser.add_argument,但没有奏效。

#!/usr/bin/env python
# Display a runtext with double-buffering.
from samplebase import SampleBase
from rgbmatrix import graphics
import time


class RunText(SampleBase):
    def __init__(self, *args, **kwargs):
        super(RunText, self).__init__(*args, **kwargs)
        self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="I love you!")
self.parser.add_argument("-t", "--text", help="The text to scroll on the RGB LED panel", default="Will you marry me?")

    def run(self):
        offscreen_canvas = self.matrix.CreateFrameCanvas()
        font = graphics.Font()
        font.LoadFont("../../../fonts/7x13.bdf")
        textColor = graphics.Color(255, 255, 0)
        pos = offscreen_canvas.width
        my_text = self.args.text

        while True:
            offscreen_canvas.Clear()
            len = graphics.DrawText(offscreen_canvas, font, pos, 10, textColor, my_text)
            pos -= 1
            if (pos + len < 0):
                pos = offscreen_canvas.width

            time.sleep(0.05)
            offscreen_canvas = self.matrix.SwapOnVSync(offscreen_canvas)


# Main function
if __name__ == "__main__":
    run_text = RunText()
    if (not run_text.process()):
        run_text.print_help()

这给了我一个错误输出:

Traceback (most recent call last):

argparse.ArgumentError: argument -t/--text: conflicting option string(s): -t, --text

我需要解决什么问题才能让它有多行?我试过用谷歌搜索,但找不到解决方案。

我正在使用带有 128x32 LED 面板的 adafruit 帽子。

4

1 回答 1

0

你必须只使用一个add_argument("-t", ...)然后你选择

1) 全部作为一个字符串发送

--text "line1;line2;line3"

后来用来split(";")把它分成几行

2) 用途action="append"

add_argument("-t", "--text", action="append")

然后你可以--text多次使用它会创建包含所有值的列表

--text "line1" --text "line2" --text "line3"

3) 用途nargs="*"

add_argument("-t", "--text", nargs="*")

然后你可以使用--text多行而不;使用空格

--text "line1" "line2" "line3"

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-t1')
parser.add_argument('-t2', action='append')
parser.add_argument('-t3', nargs='*')

args = parser.parse_args()

if args.t1:
    args.t1 = args.t1.split(';')
print(args)

利用

./main.py -t1 "a;b;c" -t2 "x" -t2 "y" -t2 "z" -t3 "1" "2" "3"

结果

Namespace(t1=['a', 'b', 'c'], t2=['x', 'y', 'z'], t3=['1', '2', '3'])
于 2020-01-02T00:57:58.600 回答