用Python捕获netcat shell命令的输出

3
我希望能够在我的Python脚本中执行netcat命令,因此我使用了'subprocess.Popen',但问题是该命令的输出直接打印在我的shell控制台上,我想将其存储到一个变量中,以便在打印之前进行一些修改。
res = subprocess.Popen("nc -v 192.168.1.1 25", stdout=subprocess.PIPE, stderr=None, shell=True)
#output = res.communicate()
#output = str(output)
#print output

你尝试过重定向 stderr 吗?除非提示你输入密码,否则 nc 不太可能直接打印到终端。 - jfs
我确认,当我使用ls -l代替nc时,它可以工作,因此即使您不使用print命令,nc命令也会输出结果,可能的解决方案是什么? - user3383192
1
对于像这样简单的东西,为什么不直接使用套接字? - Keith
2个回答

1
如果您想在Python中轻松地调用shell命令,请使用sh库。
在sh中,这将是:
  from sh import nc
  output = nc("-v", "192.168.1.1", "25")  # output is string of the command output

一如既往,安装Python库建议使用virtualenv进行


0

我使用这个来捕获系统命令的输出,注意它只会获取最后一行。根据需要修改最后一行周围的内容以获取更多:

def GetOutput(command):
    lastline = os.popen(command).readlines()
    result = lastline[0].rstrip()
    return result

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接