簡體   English   中英

Python bash管道

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM