Mar*_*tin 3 python arguments callback
我想知道将参数传递给回调函数的语法。
这是我的代码:
#!/usr/bin/env python3
import sys,os,time
import RPi.GPIO as GPIO
import subprocess
flag_callback=True
def Callback(channel,port_nb,dist_user,dist_ip):
global flag_callback
flag_callback=False
print('Button Pushed. SSH Tunnel open on port: \"{}\" until reboot.'.format(port_nb))
bashCommand = "nohup ssh -NR {}:localhost:22 {}@{}".format(port_nb,dist_user,dist_ip)
subprocess.Popen(bashCommand.split(),
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'a'),
preexec_fn=os.setpgrp
)
def main():
if len(sys.argv) > 1:
port_nb=sys.argv[1]
else:
port_nb='2222'
if len(sys.argv) > 2:
dist_user=sys.argv[2]
else:
dist_user='martin'
if len(sys.argv) > 3:
dist_ip = sys.argv[3]
else:
dist_ip='192.168.11.111'
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(4, GPIO.FALLING, callback = Callback(port_nb,dist_user,dist_ip), bouncetime = 1000)
try:
while(flag_callback):
time.sleep(1)
except:
pass
if __name__== "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
但它不起作用......:
Traceback (most recent call last):
File "./OnPushButton_PULLUP.py", line 55, in <module>
main()
File "./OnPushButton_PULLUP.py", line 47, in main
GPIO.add_event_detect(4, GPIO.FALLING, callback = Callback(port_nb,dist_user,dist_ip), bouncetime = 1000)
TypeError: Callback() missing 1 required positional argument: 'dist_ip'
Run Code Online (Sandbox Code Playgroud)
我错过了某件事,但我不明白是什么......我在这里看了一眼,但仍然停留在这一点上:/
这种情况的通常解决方案是使用functools.partial(). 请参阅这篇文章以获取示例解释:https://www.geeksforgeeks.org/partial-functions-python/
| 归档时间: |
|
| 查看次数: |
22147 次 |
| 最近记录: |