我想从 python 运行 bash 命令。我的代码:
process = subprocess.Popen(('ifconfig -s'), stdout=subprocess.PIPE, shell=True)
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()
这将执行“ifconfig -s”,输出将显示在 16x2 LCD 上。该显示器无法显示太多信息。因此,新命令为:
ifconfig | awk '$1 {print $1}' FS=" " ORS=,
在 shell 中运行完美,但在 python 代码中遇到了问题。当我简单地用这个更改“ifconfig -s”时,我得到了错误。我认为这是由于 >'< 引号造成的...
您能帮助我使新的 ifconfig 与旧代码一起工作吗?
答案1
process = subprocess.Popen(
r"ifconfig | awk '$1 {print $1}' FS=' ' ORS=,",
stdout=subprocess.PIPE,
shell=True
)
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()
如果传递了“shell=True”并且传递了一个序列,则命令及其参数必须列为序列的单独项,如(“ifconfig”,“-s”)。
如果传递了字符串(如上所示),则可以轻松实现 ipc,因为当 shell 为真时,整个字符串都会传递给 shell。
要传递序列并执行“ipc”,
process1 = subprocess.Popen(
[ 'ifconfig'],
stdout=subprocess.PIPE
)
process2 = subprocess.Popen(
[ 'awk','$1 {print $1}', 'FS=" "', 'ORS=,'],
stdout=subprocess.PIPE,
stdin=process1.stdout
)
output = process2.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()