将bash(带有*和管道)命令转换为Popen时出错

时间:2019-02-26 08:57:58

标签: python bash popen

我有这个bash脚本,我想直接从Python调用:

#!/bin/bash  
for usb in $(ls /dev/ttyUSB*); do echo $(udevadm info $usb | grep ID_SERIAL= | cut -d ' ' -f 2) $usb; done

第一部分出现错误:

from subprocess import Popen
Popen('ls /dev/ttyUSB*'.split())

我知道这是由于Popen运行sh,并且不支持通配符,所以我尝试通过以下方式调用bash

from subprocess import Popen
Popen('/bin/bash ls /dev/ttyUSB*'.split())

OR

Popen('/bin/bash "ls /dev/ttyUSB*"'.split())

但是得到了

  

/ bin / ls:/ bin / ls:无法执行二进制文件

但是,文件确实存在:

ls /dev/ttyUSB*

输出:/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

解决此问题后,我仍然必须了解如何在()中间使用管道[即-for usb in $(ls /dev/ttyUSB*); do echo $(udevadm info $usb | grep

0 个答案:

没有答案