使用python安装Windows驱动程序

时间:2015-06-25 12:12:03

标签: python python-3.x

我正在尝试使用python脚本自动化驱动程序安装,以前我使用批处理文件执行相同的任务,因为我现在正在使用python构建GUI我想将所有内容合并到python中。

我正在使用pnputil.exe来安装驱动程序:'pnputil -i -a path_to_inf' 但由于某种原因,我不能使它在python中工作,我已经尝试过subprocess.call,os.system,但没有任何作用,我总是得到某种错误,使用os.system我可以运行注册表命令来读/写/添加/删除键,但使用pnputil它只是给我错误。

os.system error ='pnputil'未被识别为内部或外部命令, 可操作程序或批处理文件。

subprocess.call error = subprocess.Popen(['pnputil -i -a path_to_inf'],shell = True)=文件名,目录名或卷标语法不正确。

2 个答案:

答案 0 :(得分:2)

你必须使用pnputil.exe的整个地址在python中执行..

试试这个

subprocess.Popen(['C:\\Windows\\System32\\PNPUTIL.exe -i -a path_to_inf'], shell=True) 

或者

subprocess.Popen(['C:\\Windows\\SYSNATIVE\\PNPUTIL.exe -i -a path_to_inf'], shell=True)

要么应该工作,因为它基于32位和64位版本

答案 1 :(得分:2)

我自己碰到了这个问题,并在很长一段时间内用头撞了一下。将其放置在这里给其他遇到问题的人,因为我找不到很好的解释为什么会发生此问题。

发生此问题的原因是32位Python应用程序正尝试访问64位Windows资源,并被自动重定向到错误的路径。有关这种关系的更多信息,请点击此处:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

因此,如果您的Python安装是64位的,那么您已经处在正确的上下文中,只需调用pnputil即可。如果您使用的是32位Python,则必须重定向到sysnative。以下是我当前用于获取驱动程序商店驱动程序列表的代码:

import platform
import subprocess

if '32bit' in platform.architecture():
    process = '%systemroot%\Sysnative\pnputil.exe -e'
else:
    process = 'pnputil.exe -e'

p = subprocess.Popen(process, shell=True,
        stdout=subprocess.PIPE, universal_newlines=True)