[英]Python bash pipe
我想將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腳本輸出的變量。 但是當我這樣做或通過重復echo命令和管道手動更改值時,它可以工作(在bash中)。
v.in.ascii -zn out=abcx format=standard --overwrite
bash命令的上述部分是Grass GIS的一部分
誰能幫我!
您可以使用print
輸出到stdout並將Python進程傳遞給下一個進程,例如
python myprogram.py | ...
myprogram.py
位置如下:
for x in something:
print dosomething(x)
這對我有用:
>>> stdin, stdout = os.popen2("echo %s | grep 'test'" % 'some test param')
>>> print stdout.read()
some test param
>>>
對於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
我非常喜歡John Paulett的回答。
我認為如果使用os.system
而不是os.popen
你的echo
示例將會起作用。
在這里使用popen
一種方法是這樣的:
f = os.popen("v.in.ascii -zn out=abcx format=standard --overwrite", 'w')
f.write("P 1 1 591336 4927369 1 321\n")
f.close()
(您必須指定管道用於寫入。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.