Программа Python игнорирует ввод кнопки - PullRequest
0 голосов
/ 27 апреля 2018

Я новичок в python и linux, и недавно я установил Twitter-бот с Raspberry Pi, чтобы бездельничать и веселиться. Я хочу настроить систему, в которой мой RasPi отправляет твит каждый раз, когда я нажимаю кнопку. Я следовал инструкциям на https://raspberrypihq.com/use-a-push-button-with-raspberry-pi-gpio для настройки основного входа.

У меня есть два .py файла, tweet_test.py и buttonPress.py

tweet_test:

#!/usr/bin/env python
import os
import random
from twython import Twython


# your twitter consumer and access information goes here
apiKey = ''
apiSecret = ''
accessToken = ''
accessTokenSecret = ''

api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)


messages = [
    "A button was pressed!!",
    "My creator pressed a button.",
    "This tweet was triggered by a button press.",
]

message = random.choice(messages)

api.update_status(status=message)
print("Tweeted: " + message) 

ButtonPress:

import tweet_test
import RPi.GPIO as GPIO #Import Raspberry Pi GPIO library


def button_callback(channel):
    tweet_test
    print("Button was pushed!")

GPIO.setwarnings(False) #Ignore warning for now
GPIO.setmode(GPIO.BOARD) #Use physical pin numbering
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #Set pin 10 to be an 
input pin and set initial value to be pulled low (off)

GPIO.add_event_detect(10,GPIO.RISING,callback=button_callback) #Set up 
event on pin 10 rising edge

message = input("Press enter to quit\n\n") #Run until someone presses 
enter

GPIO.cleanup() #Clean Up

Однако, когда я запускаю buttonPress.py в командной строке, первое, что он делает, это твит, даже не получив никакого ввода от кнопки. Затем он начинает получать нажатия кнопок, но ничего не пишет. Пожалуйста, помогите!

Пример вывода:

user1@raspberrypi:~/TwitterBot $ sudo python buttonPress.py
Tweeted: A button was pressed!!
Press enter to quit

Button was pushed!
Button was pushed!
Button was pushed!

1 Ответ

0 голосов
/ 27 апреля 2018

Вы импортируете файл tweet_test.py в самом начале, и он будет запущен первым, который будет работать точно так, как он должен делать, то есть отправлять твит. Вам нужно обернуть часть твита как функцию, чтобы она запускалась только при вызове:

In tweet_test.py

def tweet():
    message = random.choice(messages)
    api.update_status(status=message)
    print("Tweeted: " + message) 

In buttonPress.py

Вызовите функцию tweet () в вашем button_callback следующим образом:

def button_callback(channel):
    tweet()
    print("Button was pushed!")

В качестве альтернативы, просто переместите твитирующую часть в функцию button_call и объедините обе в свой button_callback:

def button_callback(channel):
    message = random.choice(messages)
    api.update_status(status=message)
    print("Button was pushed! Tweeted: %s" % message)

Обновление

Пожалуйста, измените строку import tweet_test на from tweet_test import *

...