我正在尝试编写一个 python 脚本,它可以使我的计算机与无线接入点相关联,并将名称作为字符串。例如,我可能会指定我想连接到linksys
,我的脚本会导致计算机执行此操作。
我查看了这个问题,但无法通过查看提供的链接来理解该怎么做。
有人可以指出我正确的方向吗?
我决定采纳 Paulo 的建议并尝试使用 Powershell/命令行。我找到了一篇关于通过命令行连接网络的文章。
从命令行,您可以执行以下操作:
netsh wlan connect <profile-name> [name=<ssid-name>]
...其中name=<ssid-name>
部分是可选的,并且仅当配置文件包含多个 ssid 时才必须。
但是,看起来配置文件必须已经存在于机器上才能使命令行的东西工作。我确实找到了关于以编程方式创建个人资料的论坛帖子,但我不想通过它进行拉票。
如果配置文件名称已经存在,那么您可以从 Python 执行类似于以下的操作:
import subprocess
def connect_to_network(name):
process = subprocess.Popen(
'netsh wlan connect {0}'.format(name),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
# Return `True` if we were able to successfully connect
return 'Connection request was completed successfully' in stdout
这是一个不完美的解决方案,我不完全确定它是否适用于所有情况,但它确实适用于我的特定情况。我想我会发布我想出的东西,以防其他人想尝试修改它以使其更好。
您链接的答案谈到从 Windows API 调用低级 C 函数。摆弄低级的东西会让我的大脑受伤。
有一个围绕原生 C 调用的 .Net 包装器,您可以直接从IronPython使用这个更高级别的 API 。不幸的是,它没有很好的文档记录,但是查看 C# 示例并挖掘源代码应该比调用底层 API 更容易。这是一个非常以 Windows 为中心的解决方案,因此powershell可能会更好地为您服务。
我编写了一个 Python CLI 工具,用于通过命令行界面控制 Wi-Fi。这个项目中有一个库,它应该符合您的要求。
https://github.com/changyuheng/pywinwifi
还有另一个独立的库,但我从未尝试过。