下面是一个运行子进程的简单脚本,它从终端输出的ifconfig
命令中检索IP。
我注意到subprocess.check_output()
总是返回一个带有\n
的值。
我希望得到一个不带\n
的返回值。
怎么能做到?
$ python
>>> import subprocess
>>> subprocess.check_output("ifconfig en0 | awk '{ print $2}' | grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}'", shell=True)
'129.194.246.245\n'
一般来说:
subprocess.check_output()
不添加新行。echo
是的。可以使用-n
开关来抑制换行符,但必须避免使用shell内置实现(因此使用/bin/echo
):如果改用
echo -n
,则可以得到字符串'-n hello world\n'
,因为并非所有的sh
实现都支持-n
开关支持echo
(例如OS X)。当然,您可以始终使用^{} 或^{} 来删除空白,但不要责怪这里的
subprocess
:您的问题更新使用
awk
和grep
添加了一个更复杂的示例:此处grep添加(最终)换行符。} manual :
grep -o
可能只打印匹配文本,但仍会添加新行来分隔匹配。请参阅^{强调我的。
您可以在末尾添加^{} 以从管道输出中删除任何新行:
您可以
str.rstrip
任何换行符或使用Martijn建议的内容,还可以使用python解析输出,需要awk或grep而不添加任何换行符:您可以拆分:
或者使用自己的regex:
关键是你不需要awk或grep。
如果要匹配ipv4或ipv6,并且在返回错误时也要捕获,即没有这样的接口,则可以捕获任何非零退出状态下将引发的
CalledProcessError
,很容易使用ipv4的regex,但对于ipv6,使用inet6
获取ipv6地址更简单。演示:
相关问题 更多 >
编程相关推荐