我试图通过Python调用一个带有几个参数的进程。执行批处理文件本身对我来说很好,但是将其转换为Python会让我尖叫。批处理文件的内容如下:
"C:\Program Files\bin\cspybat" "C:\Program Files\bin\armproc.dll" "C:\Program Files\bin\armjlink.dll" "C:\Documents and Settings\USER\Desktop\CAL\testing\Verification\FRT\Code\TC1\Output\Genericb\Debug\Exe\Gen.out" --download_only --backend -B "--endian=little" "--cpu=Cortex-M3" "--fpu=None" "-p" "C:\Program Files\CONFIG\debugger\ST\iostm32f10xxb.ddf" "--drv_verify_download" "--semihosting" "--device=STM32F10xxB" "-d" "jlink" "--drv_communication=USB0" "--jlink_speed=auto" "--jlink_initial_speed=32" "--jlink_reset_strategy=0,0"
批处理文件运行的可执行文件名为cspybat
。可执行文件的输出提供以下信息:All parameters after
——后端are passed to the back end
。
还要注意,有些参数是字符串,有些不是。
溶液
这对我很有用:
""" MCU flashing function"""
params = [r"C:\Program Files\bin\cspy",
r"C:\Program Files\bin\arpro.dll",
r"C:\Program Files\bin\arjink.dll",
r"C:\Documents and Settings\USER\Desktop\Exe\GenerV530b.out",
"--download_only", "--backend", "-B", "--endian=little", "--cpu=Cort3", "--fpu=None", "-p",
r"C:\Program Files\CONFIG\debugger\ST\iostm32f10xxb.ddf",
"--drv_verify_download", "--semihosting", "--device=STM32F10xxB", "-d", "jlink", "--drv_communication=USB0",
"--jlink_speed=auto", "--jlink_initial_speed=32", "--jlink_reset_strategy=0,0" ]
print(subprocess.list2cmdline(params))
p = subprocess.Popen(subprocess.list2cmdline(params))
首先,你不需要所有这些引语。所以把它们移走。当文件名有空格时,只需要在有文件名的参数周围加引号(愚蠢的是,Windows经常这样做)。
您的参数只是一个字符串列表,其中一些需要引号。因为Windows对路径分隔符使用非标准的
\
,所以对这些名称使用“raw”字符串。使用类似于
要在Windows中执行批处理文件,请执行以下操作:
如果不想执行批处理文件,而是直接从Python执行问题中的命令,则需要对Popen的第一个参数进行一些试验。
首先,第一个参数可以是字符串或序列。
所以你要么写:
或者
根据文件:
所以如果你使用一个序列,它将被转换成一个字符串。我可能会先尝试使用一个序列,因为这样就不必引用包含空格的所有元素(
list2cmdline()
为您这样做)。为了排除故障,我建议您将序列传递给
subprocess.list2cmdline()
,并检查输出。编辑:
如果我是你,我会这样做:
a)创建一个简单的Python脚本(
testparams.py
),如下所示:b)从命令行(
python testparams.py
)运行脚本,将输出复制并粘贴到另一个命令行,按enter并查看发生了什么。c)如果不起作用,则编辑python文件并重复操作,直到它起作用。
相关问题 更多 >
编程相关推荐