首页 > 其他分享 >解决方案 | 如何解决subprocess.Popen(cmd)代码中含有空格路径的问题?

解决方案 | 如何解决subprocess.Popen(cmd)代码中含有空格路径的问题?

时间:2023-05-26 16:15:16浏览次数:47  
标签:exe arg1 arg2 cmd Popen subprocess

 

一、背景

因为在python中需要用到subprocess.Popen(cmd),其中cmd由一堆连接的字符串构成:譬如,xxx.exe inputdir outputdir -arg1 -arg2

(具体例子:1.exe C:\Users\Administrator\Desktop\my output -arg1 -arg2 )

1.exe C:\Users\Administrator\Desktop\新建文件 夹 C:\Users\Administrator\Desktop\my output -arg1 -arg2

但是我的输入输出文件夹中存在空格,需要解决这个问题,网上的一般方法是加上双引号,估计大部分也能通过这个解决问题。对于路径是变量的情况,更好的解决方法在下面!

二、解决方案

中文博客上有不少误导,搜索到这个才是正确的。

 

https://stackoverflow.com/questions/60290732/subprocess-with-a-variable-that-contains-a-whitespace-path

 

为了防止链接失效,把代码复制过来。

 

You can either put double quotes around each argument with potential white spaces in it:

cmd = f'"{tar_exe}" -tf "{image_file}"'
subprocess.Popen(cmd, shell=True)

or don't use shell=True and instead put arguments in a list:

subprocess.Popen([tar_exe, '-tf', image_file])

也就是说:在python中把所有参数变为一个变量形成的列表即可。


import subprocess

arg1 = "1.exe" #某个程序(可以是绝对路径)
arg2 =  inputdir #输入路径变量
arg3 = outputdir #输出路径变量
arg4 = "其他参数"
cmd =[arg1, arg2, arg3, arg4]
ps = subprocess.Popen(cmd)
ps.wait()    #让程序阻塞

print("运行结束")

 


标签:exe,arg1,arg2,cmd,Popen,subprocess
From: https://www.cnblogs.com/issacnew/p/17434981.html

相关文章

  • Windows常用的 CMD 命令合集
    常用的CMD命令合集:基础命令dir:列出当前目录中的文件和子目录。cd:更改当前目录。例如,cdDocuments将当前目录更改为Documents文件夹。md或mkdir:创建一个新目录。例如,mkdirNewFolder将在当前目录下创建一个名为NewFolder的新目录。rd或rmdir:删除一个空目录。例如......
  • 快速解决cmd命令行乱码问题
    1.查看cmd编码方式 方法一:打开cmd,在命令行输入chcp 按下回车键,会显示如下图所示的信息。(“936”代表的意思就是GBK(汉字内码扩展规范),通常情况下GBK也是cmd的默认编码。) 方法二:打开cmd.在标题栏单击鼠标右键,选择“属性”。 在“属性”>>“选项”一栏中,就可以看到当前代码页的......
  • Windows系统下设置cmd命令行(终端)走代理的方法
     根据代理软件查看对应端口号(因为可能不是缺省端口号) 这里我本地代理的端口号是10792,下一步设置记得修改端口号与此对应。#有些朋友好像为什么设置http和socket5其实设置哪种都是可以的,具体看你们自己代理软件都支持的协议有哪些,就可以了#记得修改端口号,比如我的是10792,记......
  • firewall-cmd相关
    使用命令firewall-cmd--list-all,查看到firewall 当前的状态列表。1public(active)2target:default3icmp-block-inversion:no4interfaces:wlo15sources:6services:dhcpv6-clientftpssh7ports:22/tcp8protocols:9forward:y......
  • cmd python pip 笔记
    ......
  • 10. CMDB前端开发-IDC管理
    10.CMDB前端开发-IDC管理CMDB前端开发-IDC管理IDC管理首先需要将布局做一下调整,目录结构如下删除原先的A~C.vue文件,修改router/index.js路由文件如下:...constroutes=[{path:'/login',name:'登录',component:()=>import('../views/Login.vu......
  • cmd启动/关闭mysql
    cmd启动/关闭mysqlnetstartmysql#启动mysqlnetstopmysql#关闭mysql#无法运行就在管理员模式下输入命令问题解决先mysqld--install之后再运行启动/关闭命令即可参考https://blog.csdn.net/lovelygirlyuzhu/article/details/123902128......
  • jcmd常用用法
    jvmcommand用于将诊断命令请求发送到正在运行的java虚拟机,从jdk7开始提供。是一个功能全面的工具,可用于获取目标java进程的性能统计,jfr,内存使用,垃圾收集,线程堆栈,jvm运行时间。C:\Users\user>jcmd-hUsage:jcmd<pid|mainclass><command...|PerfCounter.print|-ffile>o......
  • linux-cmd-zip-unzip
    linux-cmd-zip-unzip参考地址https://www.runoob.com/linux/linux-comm-zip.html1.zip压缩1.1.zip语法参数zip[-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b<工作目录>][-ll][-n<字尾字符串>][-t<日期时间>][-<压缩效率>][压缩文件][文件...][-i<范本样式>][-x<范本样式>]#......
  • linux-cmd-kill
    kill命令介绍kill命令用了关闭执行中的进程。是通过向进程id发送信号来工作。默认的信号为SIGTERM(15),通知进程关闭。语法参数语法:kill[-ssignal|-p][--]pid...kill-l[signal]常用参数:-l<信息名或数字>:默认-l参数会列出全部的信号名称,指定信......