救助にシュレックス!
モジュール shlex は、シェル コマンド全体を含む文字列を取得し、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」を 2 つのトークンに分割することに注意してください。一方、「--script-args='dns-check-zone.domain=www.macmonster.com'」は保持されましたが、一重引用符は削除されました。