带有args的子流程调用仅读取第一个arg

时间:2018-07-11 12:06:05

标签: python subprocess

我正在尝试使nmap扫描自动化,并且正在使用子进程模块来做到这一点。我几乎将三个变量传递给subprocess.call并运行命令。这是我的代码

import subprocess

TOOL = 'nmap'
joined = '-p1 5000'
target = 'localhost'

subprocess.call([TOOL, joined, target], shell=True)

这应该导致nmap -p1 5000 localhost在我的系统上运行,这是一个有效的命令,但是,调用方法似乎只能识别TOOL(nmap),它只是打印出nmap的选项。有人知道我在这里想念的吗?

1 个答案:

答案 0 :(得分:3)

我没有安装nmap,但是您需要设置shell=False并拆分参数:

import subprocess

TOOL = 'ls'
joined = '-a -l'
target = '/tmp'

print(subprocess.call([TOOL, *joined.split(), target], shell=False))