带有args的子进程调用只读取第一个arg



我正在尝试自动进行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的选项。有人知道我在这里错过了什么吗?

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

import subprocess
TOOL = 'ls'
joined = '-a -l'
target = '/tmp'
print(subprocess.call([TOOL, *joined.split(), target], shell=False))

最新更新