繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM