python - bash 命令通过 cli 正常运行但不在 python 脚本中运行

标签 python linux bash python-2.7

这是 python 脚本,它是从 cli 获取当前互联网速度并将其保存在 python 变量中的程序

from subprocess import PIPE, Popen

def cmdline(command):
    process = Popen(args=command,stdout=PIPE,shell=True)
    return process.communicate()[0]

aa=(cmdline("awk '{if(l1){print ($2-l1)/1024,($10-l2)/1024} else{l1=$2; l2=$10;}}' <(grep eth0 /proc/net/dev) <(sleep 1); <(grep eth0 /proc/net/dev)"))

print(str(aa))

给出错误

/bin/sh: 1: Syntax error: "(" unexpected

最佳答案

Popen默认情况下使用 /bin/sh 执行其命令, POSIX 外壳。它不识别 bash分机<(...) ,这会导致您的错误。最快的解决方法是指定您要使用 /bin/bash作为外壳:

process = Popen(args=command, stdout=PIPE, shell=True, executable="/bin/bash")

更好的解决方案是坚持使用与 POSIX 兼容的命令,这样您的 Python 脚本就不会依赖 bash安装在任何特定位置,或根本没有安装。有点像

cmd = '''{
  grep eth0 /proc/net/dev
  sleep 1
  grep eth0 /proc/net/dev
  } | awk '{if(l1){print ($2-l1)/1024,($10-l2)/1024} else{l1=$2; l2=$10;}}'
'''


aa=(cmdline(cmd))

最好的解决方案是弄清楚如何在 Python 本身中执行您想要的操作,而不是嵌入 shell 脚本。

关于python - bash 命令通过 cli 正常运行但不在 python 脚本中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707469/

相关文章:

linux - nginx 服务器永远无法解析

linux - 程序仍在运行时如何查看 nohup 文件?

bash - Bash 中 * 扩展的长度限制?

bash - 递归复制文件夹,排除部分文件夹

javascript - 返回空字典的原始 SQL 查询的 JSON 转储

python - 如何训练仅由 True 组成的数据集?在Python中

python - 当用户输入0时,如何打印程序并继续而不是崩溃?

linux - 为什么在子进程中忽略信号SIGABRT

ios - Xcode 预 ActionScript 不起作用?

python - 如何根据 pandas 中值的频率绘制堆积条形图?