我正在尝试使用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)=文件名,目录名或卷标语法不正确。
答案 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资源,并被自动重定向到错误的路径。有关这种关系的更多信息,请点击此处:
因此,如果您的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)