我需要一个python脚本的帮助,我正试图适应一个特定的需要

我需要一个python脚本的帮助,我正试图适应一个特定的需要,python,Python,我是Python的新手,我通常使用Perl 我有一个Arduino与一些伺服装置连接,我使用这些伺服装置来控制一个网络摄像头,所讨论的脚本工作得非常完美,伺服装置接收指令并执行它们应该执行的操作: #!/usr/bin/env python import serial usbport = '/dev/ttyACM0' # Set up serial baud rate ser = serial.Serial(usbport, 9600, timeout

我是Python的新手,我通常使用Perl

我有一个Arduino与一些伺服装置连接,我使用这些伺服装置来控制一个网络摄像头,所讨论的脚本工作得非常完美,伺服装置接收指令并执行它们应该执行的操作:

    #!/usr/bin/env python
    import serial

    usbport = '/dev/ttyACM0'

    # Set up serial baud rate
    ser = serial.Serial(usbport, 9600, timeout=1)


    def move(servo, angle):
        '''Moves the specified servo to the supplied angle.

        Arguments:
        servo
          the servo number to command, an integer from 1-4
        angle
         the desired servo angle, an integer from 0 to 180

    (e.g.) >>> servo.move(2, 90)
           ... # "move servo #2 to 90 degrees"'''

    if (0 <= angle <= 180):
       ser.write(chr(255))
       ser.write(chr(servo))
       ser.write(chr(angle))
    else:
        print "Servo angle must be an integer between 0 and 180.\n"
我已经将脚本转换为接受命令行输入,但是程序似乎无法工作。谁能找出我做错了什么,这是我的说法:

    #!/usr/bin/env python
    import serial
    import sys

    try:
            servo = int(sys.argv[1])
            angle = int(sys.argv[2])
    except IndexError:
            print ('a servo and angle are required')
    sys.exit(2)

    # Set up serial baud rate
    usbport = '/dev/ttyACM0'
    ser = serial.Serial(usbport, 9600, timeout=1)

    def move(servo, angle):
        '''Moves the specified servo to the supplied angle.

    Arguments:
        servo
          the servo number to command, an integer from 1-4
        angle
          the desired servo angle, an integer from 0 to 180

    (e.g.) >>> servo.move(2, 90)
           ... # "move servo #2 to 90 degrees"'''

    if (0 <= angle <= 180):
        ser.write(chr(255))
        ser.write(chr(servo))
        ser.write(chr(angle))
    else:
        print "Servo angle must be an integer between 0 and 180. You typed:"
        print servo
        print angle
    move(servo, angle)
我知道脚本工作正常,就好像我告诉它做一个181,我得到的错误是角度超出了范围,所以我完全不明白为什么信息没有传递给串行/arduino

非常感谢您的帮助,并为冗长的邮件感到抱歉


吉尔伯特

为什么要改编原剧本?只要用这个:

import servo
servo.move(int(argv[1]), int(argv[2]))

我不确定在将代码粘贴到stackoverflow中时是否发生了这种情况,但缩进在多个地方都有缺陷。也请检查此项:)

函数定义后的缩进看起来是错误的。应该是:

def move(servo, angle):
    '''Moves the specified servo to the supplied angle.

    Arguments:
        servo
          the servo number to command, an integer from 1-4
        angle
          the desired servo angle, an integer from 0 to 180

    (e.g.) >>> servo.move(2, 90)
           ... # "move servo #2 to 90 degrees"'''

    if (0 <= angle <= 180):
        ser.write(chr(255))
        ser.write(chr(servo))
        ser.write(chr(angle))
    else:
        print "Servo angle must be an integer between 0 and 180. You typed:"
        print servo
        print angle
def移动(伺服、角度): ''将指定的伺服移动到提供的角度。 论据: 伺服 要命令的伺服编号,1-4之间的整数 角 所需的伺服角度,0到180之间的整数 (例如)>>>>伺服移动(2,90) ... # “将伺服2移动到90度” 如果(0旁边,在该部分:

try:
        servo = int(sys.argv[1])
        angle = int(sys.argv[2])
except IndexError:
        print ('a servo and angle are required')
sys.exit(2)

# Set up serial baud rate

您也应该indend sys.exit(2)。因此,程序在获取参数后立即退出。

您的缩进基本上是错误的

请参阅此代码段:

try:
        servo = int(sys.argv[1])
        angle = int(sys.argv[2])
except IndexError:
        print ('a servo and angle are required')
sys.exit(2)

sys.exit(2)
调用总是被执行!所以程序什么也不做。

Hi,缩进是错误的,因为我在原始文件中输入代码的方式是正确的。那么,请您发布正确的代码,以便我们可以查找错误吗?我已经将代码放在一个文件中:http:www.sharpnet.co.uk/tmp/servo.py谢谢。(附言:我没有收到回复是正常的吗?)抱歉上面的帖子,愚蠢的网站将回复视为“添加评论”(?!)我已经将代码放在一个文件中:http:www.sharpnet.co.uk/tmp/servo.txt谢谢。(附言:我没有收到回复是正常的吗?)我不知道这个网站是怎么工作的,我从来没有收到过通知,似乎人们都太忙了,没有时间去关心这个问题?嗨,缩进是错误的,因为我输入代码的方式,在原始文件上,它是正确的。嗨,缩进是错误的,因为我输入代码的方式,在原始文件上,它是正确的,然后请修复缩进f问题中的代码。在Python缩进问题上,如果我们没有正确的代码,我们将无法帮助您。我已经将代码放在了一个文件中:http:www.sharpnet.co.uk/tmp/servo.txt谢谢。(PS.这正常吗?我没有收到回复通知?)您好,谢谢您的帮助,是的,这很有意义。尽管您如何在不进入python界面的情况下从CLI调用它。另外,您应该如何在伺服之后键入伺服和角度。move(int(argv[1]),int(argv[2])??
try:
        servo = int(sys.argv[1])
        angle = int(sys.argv[2])
except IndexError:
        print ('a servo and angle are required')
sys.exit(2)

# Set up serial baud rate
try:
        servo = int(sys.argv[1])
        angle = int(sys.argv[2])
except IndexError:
        print ('a servo and angle are required')
sys.exit(2)