from subprocess import *
c = 'command 1 && command 2 && command 3'
# for instance: c = 'dir && cd C:\\ && dir'
handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()
Если я не ошибаюсь, то команды будут выполняться над «сессию» и, таким образом, сохраняя все, что вам нужно niformation между командами.
Правильно, используя shell=True
(из того, что я был жестким), предполагается, что он должен использоваться, если задана строка команд, а не список. Если вы хотите использовать список предложений должны сделать следующее:
import shlex
c = shlex.split("program -w ith -a 'quoted argument'")
handle = Popen(c, stdout=PIPE, stderr=PIPE, stdin=PIPE)
print handle.stdout.read()
А затем поймать выход, или вы могли бы работать с открытым потоком и использовать handle.stdin.write()
, но это немного сложнее.
Если только вы не хотите выполнять, читать и умереть, .communicate()
совершенен, или просто .check_output(<cmd>)
Хорошая информация п как Popen
работы можно найти здесь (Altho другую тему): python subprocess stdin.write a string error 22 invalid argument
Решение
Во всяком случае, это должны работы (вы должны перенаправить STDIN и STDOUT):
from subprocess import *
c = 'gdaltransform -s_srs \'+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs\' -t_srs epsg:4326 \n' + str(x) + ' ' + str(y) + '\n'
handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()
Есть ли причина, по которой вы не вызываете osr.CoordinateTransformation() изнутри Python? –