2015-08-19 2 views
1

Итак, я запускаю сценарии Python 3.4 в Windows, и когда я запускаю определенный скрипт, у меня есть бесконечный цикл (хотя True :), который я использую, но когда я пытаюсь выйдите из сценария с помощью Ctrl-C, он не выходит из сценария. Он печатает Клавиатура прерываний, как если бы он ушел, но потом просто оставляет мигающий курсор и не позволит мне типа, так что я должен выйти с красным X.Windows Powershell не покидает скрипт с помощью Ctrl-C

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-C.

+2

Как вы запускаете скрипты python в PowerShell? – briantist

+0

Я меняю каталог, где находятся сценарии, и где я могу получить доступ к python, а затем запускаю скрипты с помощью команды> python filename.py. Я довольно новичок в python, и я просто следую протоколу, описанному в разделе «Как узнать сайт Python Hard Way». Каков стандартный способ запуска скриптов Python? – rtmurad

+0

Я удалил тег powershell из вопроса. Если эта проблема возникает только при запуске python из приглашения powershell (что, я думаю, маловероятно), то вы можете добавить его обратно, но, пожалуйста, отредактируйте свой вопрос, чтобы уточнить, так ли это. – briantist

ответ

0

Я нашел ответ на проблемы, размещенные на исходном веб-странице:

https://github.com/tino/pyFirmata

Это ошибка, которая находится в исходном коде, из этой последовательности кода (который я оставил из кода выше первоначально, извинения!):

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

Однако вы не можете избавиться от этого кода, иначе буфер перегрузки будет перегружен.

 Смежные вопросы

  • Нет связанных вопросов^_^