Search code examples
pythonbashwifi

python subprocess call OSX


I am trying to access the wifi interface through python: In bash I can use the following

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport -I

-s can also be passed.

I have tried using the following in python:

from subprocess import call
call(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport', '-I'])

something is definitely not correct - as I get as a reply:

Traceback (most recent call last):
  File "ip3.py", line 5, in <module>
    call(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport', '-I'])
  File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/subprocess.py", line 467, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/subprocess.py", line 741, in __init__
    restore_signals, start_new_session)
  File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/subprocess.py", line 1356, in _execute_child
    raise child_exception_type(errno_num, err_msg)
OSError: [Errno 2] No such file or directory: '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport'

Any ideas would be welcome... I just want to begin by printing this to screen, saving as an array etc...


I dont have a high enough rating to answer my own question yet, so Ill say it here!

so I was being stupid!

from subprocess import call
call(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport', '-I'])

Works fine. Just needed to remove /usr/sbin/airport


Solution

  • call take first argument as command and subsequent arguments to that command.

    In your case command is, /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

    and command's two arguments are,

    1. /usr/sbin/airport
    2. -I

    So, you need to call it as,

    from subprocess import call
    call(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport' '/usr/sbin/airport', '-I'])