Python的subprocess疑问

Python在调用subprocess.Popen执行shell命令时,shell命令包含了空格,就报错,麻烦大能能帮忙看下,谢谢!

img

img

代码呢

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7468063
  • 这篇博客也不错, 你可以看下python中subprocess.Popen传参数
  • 除此之外, 这篇博客: python subprocess.Popen执行可执行文件以及杀掉进程中的 python subprocess.Popen执行可执行文件以及杀掉进程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • subprocess执行可执行文件如下:

    import subprocess
    
    p = subprocess.Popen("ec.exe")
    p.pid #查看p的进程号
    

    想要关闭进程,有三种方式,

    p.kill()
    p.terminate()
    
    import os
    os.system("taskkill /t /f /pid %s"%p.pid) #通过pid来杀进程,在window上有效
    
  • 您还可以看一下 刘海建老师的Python编程之多线程与网络编程课程中的 使用subprocess模块管理进程小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以使用shlex模块的split函数来处理带有空格的shell命令,将其分割处理后再输入到subprocess.Popen中运行。具体步骤如下:

    import subprocess
    import shlex
    
    # 原始的shell命令字符串
    cmd = "ls -l /path/with/space"
    
    # 使用shlex模块的split函数将命令字符串分割处理
    cmd_list = shlex.split(cmd)
    
    # 用分割处理后的命令列表来调用subprocess.Popen运行命令
    p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    # 获取命令运行结果
    stdout, stderr = p.communicate()
    
    # 打印输出结果
    print(stdout.decode())
    

    其中,shlex.split函数可以将字符串按照空格进行分割,并且能够识别用引号括起来的字符串。subprocess.Popen的第一个参数需要传入一个列表,该列表的元素是待运行命令的每一个部分,不需要按照空格分割。最后使用communicate函数获取命令的输出结果。