我有一个让我疯狂的问题,我开始为我的工作创建一些有用的脚本..在python 2.7脚本编写..我正在阅读一本名为“Python for Unix and Linux administrators ...”的书,我知道我应该是在python 3中编程但是目前Python 2.7给了我解决方案..所以即时创建一个使用子进程模块的脚本。
import subprocess
from subprocess import PIPE, Popen
nmap = "nmap"
argumento_nmap = "-p"
port_nmap = "22"
port2_nmap = "2104"
open_port = "open"
closed_port = "closed"
ip_nmap = "192.168.170.52"
escaneo = subprocess.Popen([nmap,argumento_nmap,puerto_nmap,ip_nmap],
stdout=PIPE)
print(escaneo.communicate()[0].split())
scan_result = escaneo
if port_nmap in scan_result:
print " Puerto abierto"
在我的脑海里......如果open_port(22)打开或关闭,脚本应该验证..但每次运行代码我都会得到下一个错误:
TypeError:'Popen'类型的参数不可迭代
..在网上搜索我发现了一些函数,如check_output(),但它们没有帮助我..有没有办法检查该变量是否进入scan_result列表?
迎接
埃斯特
答案 0 :(得分:1)
你得到的具体错误是因为x in y
期望y是一个迭代器,python将在x中搜索。我想你要设置scan_result = escaneo.communicate()[0]
。这将返回带有stdout的字符串,因此if port_nmap in scan_result:
将起作用。但是,如果字符串'22'出现在字符串中的任何位置,它将返回true,因此您可能希望像在print语句中那样进行拆分。
答案 1 :(得分:0)
scan_result = escaneo.communicate[0]
该代码对我没有用..它给了我下一个错误:{{1但是你的回答让我有力量研究更多..所以在凌晨3点我能得到我想要的东西..这里是代码
TypeError: 'instancemethod' object has no attribute '__getitem__'
先生!如果您有任何建议,请
greetz
埃斯特