我想ps -ef逐行管道输出到python.
我使用的脚本是这个(first.py) -
#! /usr/bin/python
import sys
for line in sys.argv:
print line
Run Code Online (Sandbox Code Playgroud)
不幸的是,"行"被分成由空格分隔的单词.所以,例如,如果我这样做
echo "days go by and still" | xargs first.py
Run Code Online (Sandbox Code Playgroud)
我得到的输出是
./first.py
days
go
by
and
still
Run Code Online (Sandbox Code Playgroud)
如何编写输出的脚本
./first.py
days go by and still
Run Code Online (Sandbox Code Playgroud)
?
Jan*_*cke 97
我不太明白你为什么要使用命令行参数而不是简单地从标准输入读取.Python有一个简单的习惯用于迭代stdin上的行:
import sys
for line in sys.stdin:
sys.stdout.write(line)
Run Code Online (Sandbox Code Playgroud)
我的用法示例:
$ echo -e "first line\nsecond line" | python python_iterate_stdin.py
first line
second line
Run Code Online (Sandbox Code Playgroud)
你的用法示例:
$ echo "days go by and still" | python python_iterate_stdin.py
days go by and still
Run Code Online (Sandbox Code Playgroud)
您想要的是popen,这使得可以像读取文件一样直接读取命令的输出:
import os
with os.popen('ps -ef') as pse:
for line in pse:
print line
# presumably parse line now
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想进行更复杂的分析,则必须深入研究的文档subprocess.Popen。