python 中的 bash 命令不起作用

python 中的 bash 命令不起作用

我想从 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()

相关内容