терминал и subprocess.run() показывают различное поведение для команды (osmfilter)

Я наблюдаю странное поведение с osmfilter (https://wiki.openstreetmap.org/wiki/Osmfilter), который можно установить с помощью следующей команды:

$ sudo apt-get install osmctools

Предположим, я экспортировал map.osm для региона с https://www.openstreetmap.org и я хочу фильтровать только дороги из этого файла. Я могу использовать команду:

$ osmfilter map.osm --keep='highway' > highways_terminal.osm

Файл highways_terminal.osm содержит информацию о магистралях. Затем я попытался использовать Python, чтобы сделать то же самое с subprocess.run():

import subprocess

cmd = ["osmfilter", "map.osm", "--keep='highway'"]
resp = subprocess.run(cmd, capture_output=True, text=True)

with open("highways_subprocess.osm", "w") as fp:
    fp.write(resp.stdout)

Но highways_subprocess.osm не содержит никакой информации, кроме «границы».

Я неправильно обрабатываю кавычки?


person yang5    schedule 25.01.2019    source источник
comment
Содержит ли resp.stderr сообщение об ошибке? Что такое код возврата? Обратите внимание, что вы можете напрямую указать выходной файл с помощью опции -o=<file>. Также подумайте о том, чтобы взять добычу на osmium, который быстрее и имеет больше возможностей, чем osmfilter.   -  person scai    schedule 25.01.2019
comment
resp.stderr не имеет сообщения. resp.returncode это 0. Я пробовал -o=<file>, но я все еще получаю только ограничения. Кроме того, я мог свободно получить доступ к осмию... мне не пришлось "грабить" :) jk ..спасибо!   -  person yang5    schedule 25.01.2019


Ответы (1)


У меня была эта проблема (через 10 месяцев), и я исправил ее как

cmd = "osmfilter map.osm --keep='highway' -o=highways_subprocess.osm"
subprocess.check_call(cmd, shell=True)
person D. Taylor Reich    schedule 09.12.2019