【发布时间】:2020-05-29 01:05:30
【问题描述】:
我试图在我的 python 代码中运行下一个命令:
iostat -d 7 7 -p sda | awk '!/^Device/' | awk '!/^Linux/'
到目前为止我尝试的方式是这样的:
command = ["iostat", "-d", "7", "7", "-p", "sda", "|", "awk", "'!/^Device/'", "|", "awk", "'!/^Linux/'"]
device = subprocess.Popen(command, stdout=subprocess.PIPE)
devicetr = device.stdout.read()
似乎代码无法按预期处理"'!/^Device/'" 和"'!/^Linux/'" 中的引号,例如'!/^Device/' 和'!/^Linux/'。
当没有连接 USB 时,我得到的不是空白:
Linux 4.14.98-v7+ 01/28/2020 _armv7l_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
已经尝试添加 '\' 并且这个:
Passing double quote shell commands in python to subprocess.Popen()?
【问题讨论】:
-
这不起作用,因为
|和其他字符由 shell 解释,Popen默认与shell=False一起运行。从 Python 中执行 Shell 管道并不容易,尤其是在复杂的引用中。
标签: python subprocess