【问题标题】:python + run complicated shell command via python scriptpython + 通过python脚本运行复杂的shell命令
【发布时间】:2020-07-08 11:15:30
【问题描述】:

我们想通过python脚本运行以下shell命令(我们使用python 2.7版)

echo hadoop-hdfs-namenode - 2.6.4.0-91| grep hadoop-hdfs-namenode | awk '{print $NF}' | awk '{printf "%.1f\n", $NF}'
2.6

所以我创建了以下 python 脚本来获取结果 - 2.6

import os

os.system("echo hadoop-hdfs-namenode - 2.6.4.0-91| grep hadoop-hdfs-namenode | awk '{print $NF}' | awk '{printf "%.1f\n", $NF}' ")

但是当我运行它时,我们得到了

 os.system("echo hadoop-hdfs-namenode - 2.6.4.0-91| grep hadoop-hdfs-namenode | awk '{print $NF}' | awk '{printf "%.1f\n", $NF}' ")
                                                                                                                        ^
SyntaxError: invalid syntax

是否可以通过 python 运行这个复杂的 shell? , 为了得到预期的结果 - 2.6

以及如何修正我的语法?

【问题讨论】:

  • 您也可以使用较新的 subprocess module 来替换 os.system 调用。
  • 除了@mabergerx 所说的,检查每个步骤的返回码总是一个好主意,这样您就知道何时发生错误
  • {printf "%.1f\n", $NF}更改为{printf '%.1f\n', $NF}
  • 我根据您的建议在更新后得到这个 - awk: cmd.行:1:{printf %.1f awk:cmd。 line:1: ^ 语法错误 awk: cmd.行:1:{printf %.1f awk:cmd。 line:1: ^ 意外换行符或字符串结尾 sh: line 1: , $NF}: command not found

标签: python linux python-2.7


【解决方案1】:

转义 "\n : os.system("echo hadoop-hdfs-namenode - 2.6.4.0-91| grep hadoop-hdfs-namenode | awk '{print $NF}' | awk '{printf \" %.1f\\n \", $NF}' ")

附带说明os.system 将在子shell 中执行命令(字符串)并返回命令的返回码,如果您需要输出,请查看子进程模块:https://docs.python.org/3/library/subprocess.html

【讨论】:

  • 我收到此错误 - awk: cmd. line:1: {printf "%.1f awk: cmd. line:1: ^ 未终止的字符串 awk: cmd. line:1: {printf "%.1f awk: cmd. line:1: ^ 语法错误
  • 小心你需要逃跑:os.system("echo hadoop-hdfs-namenode - 2.6.4.0-91| grep hadoop-hdfs-namenode | awk '{print $NF}' | awk '{printf \" %.1f\\n \", $NF}' ")
最近更新 更多