这是python脚本,它是从cli获取当前INTERNET速度并将其保存在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
答案 0 :(得分:2)
Popen
默认使用POSIX shell /bin/sh
执行其命令。它无法识别bash
扩展程序<(...)
,这会导致您的错误。最快的解决方法是指定您要使用/bin/bash
作为shell:
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脚本。