title: passing arguments to a callback function in Python
body: <p>I want to know the syntax for passing arguments to a callback function.</p>
  
  <p>Here is my code :</p>
  
  <pre><code>#!/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) &gt; 1:
                  port_nb=sys.argv[1]
          else:
                  port_nb='2222'
  
          if len(sys.argv) &gt; 2:
                  dist_user=sys.argv[2]
          else:
                  dist_user='martin'
  
          if len(sys.argv) &gt; 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()
  </code></pre>
  
  <p>But it's not working... :</p>
  
  <pre><code>Traceback (most recent call last):
    File "./OnPushButton_PULLUP.py", line 55, in &lt;module&gt;
      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'
  </code></pre>
  
  <p>I missed sth but I don't understand what...I took a look right <a href="https://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks" rel="nofollow noreferrer">here</a> but still stuck at this point :/</p>