Python Bash 管道

2 投票
4 回答
2273 浏览
提问于 2025-04-15 16:41

我想把一个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)

撰写回答