这是 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/