2009-12-04 68 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