shlex 来救援!
模块 shlex 将获取一个包含整个 shell 命令的字符串,并将其完全按照 Popen 和 check_output 的期望进行拆分。像这样:
import shlex, subprocess
cmd = "/usr/bin/nmap -sn -Pn todd.ns.cloudflare.com --script dns-check-zone --script-args='dns-check-zone.domain=www.macmonster.com'"
args = shlex.split(cmd)
output = subprocess.check_output(args)
当您查看 args 的内容时,您会看到:
>>> print args
['/usr/bin/nmap', '-sn', '-Pn', 'todd.ns.cloudflare.com', '--script', 'dns-check-zone', '--script-args=dns-check-zone.domain=www.macmonster.com']
请注意,shlex 将选项“--script dns-check-zone”拆分为两个标记。另一方面,它保留了“--script-args='dns-check-zone.domain=www.macmonster.com'”,但删除了单引号。