问题描述
我正在suse linux中运行此python函数,以从/ etc / hosts中对节点的grep ip进行压缩-
fun("HELLO WORLD")
#> [1] "hello world"
def mm_node():
import os
node_name = os.system("`cat /etc/hosts | egrep -i mm | grep om | awk '{print $1}'`")
return node_name
mm_node()
代替
sh: 192.168.10.10: command not found
如果我运行shell命令
(192.168.10.10
)
直接在linux命令提示符下,将o / p赋予
cat /etc/hosts | egrep -i mm | grep om | awk '{print $1}'
解决方法
反引号告诉shell捕获输出并在命令行上使用它,通常将其用作命令的参数,例如grep `whoami` /etc/passwd
。在您的情况下,命令行仅由反引号的管道组成,因此shell将管道的输出解释为要执行的命令。这就是为什么它抱怨IP地址“找不到”的原因。
如果您打算捕获要在Python代码中使用的管道的输出,则应使用subprocess
模块,它是os.system
的现代替代方案,可轻松捕获输出。例如:
import subprocess
def mm_node():
output = subprocess.run(
"cat /etc/hosts | egrep -i mm | grep om | awk '{print $1}'",shell=True,capture_output=True
).stdout
return output.strip()
print(mm_node())
,
def mm_node():
import os
node_name = os.system("cat /etc/hosts | egrep -i mm | grep om | awk '{print $1}'")
return node_name
mm_node()