在Windows上使用python执行程序

时间:2017-10-16 11:00:30

标签: python python-2.7

我是Windows python的新手。我正在尝试使用python运行命令行工具。此工具将刷新连接到机器IP地址的固件。我可以打开cmd提示符并使用命令

C:\ ToolsSuite> sdi --ip 172.23.240.41 --fwdl" c:\ BUILDS \ firmware_image.zip 这对我很有用。

但是当我尝试在Windows上使用python脚本执行时,我无法做到这一点。 Python脚本看起来像这样。

import subprocess
import os

os.chdir(r"C:\ToolsSuite")
#os.system('cd c:\mydir')
os.system("sdi --ip 192.92.48.32 --fwdl C:\firmware_image.zip")

#subprocess.Popen(r'sdi --ip 192.92.48.32 --fwdl "c:\firmware_image.zip"', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

抛出的异常是"无法找到文件"。当我将固件文件存储在某个位置时,我没有得到如何给出固件文件的路径,例如' C'开车或在Windows的某个文件夹位置。

2 个答案:

答案 0 :(得分:0)

如果sdi可执行文件位于“C:\ ToolsSuite”中,则应该可以使用:

subprocess.call(['sdi', '--ip 192.92.48.32', r'--fwdl "c:\firmware_image.zip"'])

答案 1 :(得分:0)

如果要调用Windows命令,则需要提供命令的完整路径。

您可以尝试:

import subprocess    
import os.path

# C:\ToolsSuite>sdi --ip 172.23.240.41 --fwdl "c:\BUILDS\firmware_image.zip"
cmd = os.path.join("C:\\ToolsSuite", "sdi")
args = [cmd,
        '--ip', '172.23.240.41',
        '--fwdl', 'c:\\BUILDS\\firmware_image.zip']
subprocess.check_call(args)

这里,check_call对于用异常替换非零退出代码很有用。当然,您也可以选择相同family的其他功能。