2009-12-04 70 views
2

我想將一個python腳本的輸出管道輸給一個bash腳本。我所做的,到目前爲止是我試圖用os.popen()sys.subprocess(),並試圖給管道爲例Python bash管道

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命令上面部分是草地理信息系統的一部分

誰能幫幫我!

+1

天上 '的bash管' ... – 2009-12-04 14:25:44

回答

6

您可以使用print輸出到標準輸出並將Python進程傳遞到下一個進程,例如,

python myprogram.py | ... 

myprogram.py可能看起來像:

for x in something: 
    print dosomething(x) 
1

這個工作對我來說:

>>> stdin, stdout = os.popen2("echo %s | grep 'test'" % 'some test param') 
>>> print stdout.read() 
some test param 

>>> 
0

我真的很喜歡約翰Paulett的答案。

我認爲你的echo的例子會工作,如果你使用os.system而不是os.popen。在這裏使用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() 

(你必須指定管道是寫作。)

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 
+0

這是bash命令我用做閱讀暫時 #/斌/慶典 d.mon X1 d.rast擡高! dem d.vect abcx d.vect abcy #value = 0; while read line do #value ='expr $ value + 1'; echo $ line echo $ line echo「P 1 1 $ line 1 321」| v.in.ascii -zn out = abcx format = standard --overwrite d.redraw #sleep 1 done <「cordvals.txt」 此cordvals.txt是由python腳本編寫的變量創建的如果我可以改變它,它也可以(將python腳本的輸出作爲這個while循環的輸入) – user224790 2009-12-07 06:32:51