Python在调用subprocess.Popen执行shell命令时,shell命令包含了空格,就报错,麻烦大能能帮忙看下,谢谢!
代码呢
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上有效
可以使用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函数获取命令的输出结果。