将变量设置为网关IP



我有一个代码,除了网关IP(route -n | awk '{if($4=="UG")print $2}')以外的所有内容,但我正在尝试弄清楚如何将其管道化为Python中的变量。这是我得到的:

import shlex;
from subprocess import Popen, PIPE;
cmd = "route -n | grep 'UG[ t]' | awk '{print $2}'";
gateway = Popen(shlex.split(cmd), stdout=PIPE);
gateway.communicate();
exit_code = gateway.wait();

有什么想法?

注意:我是新手。

无论好坏,您的cmd使用了外壳管道。要在子过程中使用Shell功能,必须设置shell=True

from subprocess import Popen, PIPE
cmd = "/sbin/route -n | grep 'UG[ t]' | awk '{print $2}'"
gateway = Popen(cmd, shell=True, stdout=PIPE)
stdout, stderr = gateway.communicate()
exit_code = gateway.wait()

另外,可以保留shell=False,消除管道并在Python中进行所有字符串处理:

from subprocess import Popen, PIPE
cmd = "/sbin/route -n"
gateway = Popen(cmd.split(), stdout=PIPE)
stdout, stderr = gateway.communicate()
exit_code = gateway.wait()
gw = [line.split()[1] for line in stdout.decode().split('n') if 'UG' in line][0]

由于外壳处理的变化,除非有特定的需求,否则最好避免shell=True

相关内容

  • 没有找到相关文章

最新更新