[英]bash command runs through cli fine but not running inside python script
这是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
Popen
默认使用POSIX shell /bin/sh
执行其命令。 它无法识别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脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.