2017-06-19 209 views
2

我想用DevCon从python脚本重新启动驱动程序。它的命令行工作用这个命令:从python执行DevCon CMD命令

devcon restart \"sd0007322081041363_kcanv\" 

我尝试这样做:

os.system("devcon restart \"sd0007322081041363_kcanv\"") 

与结果:

'devcon' is not recognized as an internal or external command 

,我读了使用os.system已过时,我需要使用subprocess.check_output所以我试试这个:

subprocess.check_output(['devcon', 'restart', '"sd0007322081041363_kcanv"']) 

与结果:

WindowsError:[Error 2] The system cannot find the file specified 

这:

subprocess.check_output('devcon restart "sd0007322081041363_kcanv"', shell=True) 

与结果:

subprocess.CalledProcessError: Command 'devcon restart "sd0007322081041363_kcanv"' returned non-zero exit status 1 

这:

subprocess.Popen("devcon restart \"sd0007322081041363_kcanv\"", shell=True, stdout=subprocess.PIPE).stdout.read() 

结果:

'devcon' is not recognized as an internal or external command 

这:

try: 
    subprocess.check_output('devcon disable "sd0007322081041363_kcanv" /f',shell=True,stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as e: 
    raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output)) 

与结果:

RuntimeError: command 'devcon disable "sd0007322081041363_kcanv" /f' return with errpr (cpde 1): 'devcon' is not recognized as an internal or external command, operable program or batch file 

Devcon.exe的是在Windows/System32下,它是在系统路径设置。

我知道这可能是重复的问题,但我已经尝试了很多解决方案在stackoverflow但我不能解决这个问题。

+0

尝试指定的完整路径和DEVCON的扩展名为.exe。 – lit

+0

@lit我试过 'subprocess.Popen(“C:\\ Windows \\ System32 \\ devcon.exe restart”sd0007322081041363_kcanv \“”,shell = True,stdout = subprocess.PIPE).stdout.read ()'但结果几乎相同。结果:''C:\ Windows \ System32 \ devcon.exe'不被识别为内部或外部命令 – Budlog

回答

0

最后,我想出了一个解决方案。我试过很多东西,但这个对我来说是什么工作原理:由C

  1. 副本Devcon.exe的:\ Windows \ System32下,并把它放到C:\ WINDOWS \ SysWOW64中。

  2. 我的代码:

    try: 
        subprocess.check_output('C:\\Windows\\SysWOW64\\devcon.exe restart "sd0007322081041363_kcanv" /f',shell=True,stderr=subprocess.STDOUT) 
    except subprocess.CalledProcessError as e: 
        raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))