Python Bash 管道
我想把一个Python脚本的输出结果传给一个bash脚本。我目前尝试过用 os.popen()
和 sys.subprocess()
,还试着用管道来做个例子。
os.popen('echo "P 1 1 591336 4927369 1 321 " | v.in.ascii -zn out=abcx format=standard --overwrite')
但是这样并没有成功,"591336"
和 "4927369"
是Python脚本输出的变量。不过,当我在bash中手动重复使用echo命令和管道时,它是可以工作的。
v.in.ascii -zn out=abcx format=standard --overwrite
上面的bash命令是Grass GIS的一部分。
有没有人能帮帮我!
4 个回答
1
从Python 2.6开始,建议使用subprocess
模块,而不是已经不推荐使用的os.popen
。下面是一个例子:
from subprocess import Popen, PIPE
p = Popen(["v.in.ascii", "-zn", "out=abcx", "format=standard", "--overwrite"], stdin=PIPE)
p.stdin.write("P 1 1 591336 4927369 1 321\n")
p.stdin.close()
p.wait() # unless background execution preferred
1
这个对我有效:
>>> stdin, stdout = os.popen2("echo %s | grep 'test'" % 'some test param')
>>> print stdout.read()
some test param
>>>
6
你可以直接用 print
来输出信息到标准输出(stdout),然后把这个Python程序的输出传给下一个程序,比如:
python myprogram.py | ...
这里的 myprogram.py
可能长这样:
for x in something:
print dosomething(x)