首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Powershell不退出Ctrl-C脚本

Windows Powershell不退出Ctrl-C脚本
EN

Stack Overflow用户
提问于 2015-08-19 16:15:45
回答 1查看 2.1K关注 0票数 1

所以我在Windows上运行Python3.4脚本,当我运行一个特定的脚本时,我使用的是一个无限循环(但True:),但是当我尝试用Ctrl退出脚本时,它并不是退出脚本。它打印键盘中断,好像它已经退出,但只留下闪烁的光标,不让我键入,所以我必须退出红色X。

代码语言:javascript
复制
import serial 
import time
import pyfirmata 
#from pyfirmata import Arduino, util, PWM

board = pyfirmata.Arduino('COM4', baudrate = 9600, timeout = 5)
time.sleep(2)       #sleep in units of sec

it = pyfirmata.util.Iterator(board)
it.start()


digital1 = board.get_pin('d:5:p')
digital2 = board.get_pin('d:6:p')
digital3 = board.get_pin('d:10:p')
digital4 = board.get_pin('d:11:p')  
digital = (digital1, digital2, digital3, digital4)

distObject = 1.5         #start warning at 4 inches away from objects (arbitrary)
forceGraspL = 0
forceGraspR = 0
maxForceL = 60      
maxForceR = 60
motorMaxForceL = maxForceL / 2
motorMaxForceR = maxForceR / 2

while True:
    left = 0
    right = 0       
    leftMid = 0
    rightMid = 0    
    distPerc = 0
    MOTORS = (left, right, leftMid, rightMid)


    if (distObject != 0 and distObject < 4 and forceGraspL == 0 and forceGraspR == 0):
        left = 0.9
        distPerc = round(distObject / 4.0 * 100)


    elif (forceGraspL != 0 or forceGraspR !=0):
        if (forceGraspL < motorMaxForceL and forceGraspR < motorMaxForceR):
            left = forceGraspL / motorMaxForceL
            right = forceGraspR / motorMaxForceR    

        elif (forceGraspL < maxForceL and forceGraspR < motorMaxForceR):
            left = 1
            leftMid = (forceGraspL - motorMaxForceL)/ motorMaxForceL
            right = forceGraspR / motorMaxForceR
        elif (forceGraspL < motorMaxForceL and forceGraspR < maxForceR):
            left = forceGraspL / motorMaxForceL
            right = 1  
            rightMid = (forceGraspR - motorMaxForceR)/ motorMaxForceR
        elif (forceGraspL < maxForceL and forceGraspR < maxForceR):
            left = 1
            leftMid = (forceGraspL - motorMaxForceL)/ motorMaxForceL
            right = 1  
            rightMid = (forceGraspR - motorMaxForceR)/ motorMaxForceR
        else:
            left = 1
            leftMid = 1
            rightMid = 1 
            right = 1

        if (distPerc < 100 and distPerc > 0):
            for pin in range(1, length(digital)):
                digital[pin].write(MOTORS(pin))
            time.sleep(.5)
            for pin in range(1, length(digital)):
                digital[pin].write(0)
            time.sleep(.5)

        else:
            for pin in range(1, length(digital)):
                digital[pin].write(MOTORS(pin))

任何关于我的脚本中可能导致这个问题的建议都是非常感谢的。我可以看出问题出在这个脚本中,因为我尝试过具有无限循环的其他脚本,而Ctrl也适用于这些脚本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 16:49:27

我在源网页上的问题中找到了答案:

https://github.com/tino/pyFirmata

这是一个错误,存在于原始代码中,来自这个代码序列(我最初省略了上面的代码,抱歉!):

代码语言:javascript
复制
it = pyfirmata.util.Iterator(board)
it.start()

但是,您不能摆脱此代码,否则串行缓冲区将过载。

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

https://stackoverflow.com/questions/32100774

复制
相关文章

相似问题

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