Запуск кода IDL с выводом текстового файла в Python

У меня есть несколько разных кодов, которые все принимают текстовый файл с данными в качестве входных данных и записывают в другой файл в качестве вывода. Три из этих кодов написаны на Python 2.7, а один — на IDL. Моя цель — создать одну «главную» программу на Python, которая может запускать все эти коды, набрав «python master.py». Однако из-за ограничений моей системы я не могу использовать модули «pyIDL» или «pyIDLy», указанные в этот вопрос. Не уверен, что это имеет значение, но это использование командной строки Linux.

В настоящее время мой код master.py выглядит так:

import os
os.system("python pycode_1.py")

os.system("idl")
os.system(".com idlcode.pro")
os.system(".r idlcode,"imputfile.dat"")
os.system("exit")

os.system("python pycode_2.py")
os.system("python pycode_3.py")

Этот код запускает первый код Python и нормально входит в IDL. Однако он не вводит последующие команды в IDL. Это означает, что появляется командная строка IDL, но я не могу запустить последующий код IDL.

Буду очень признателен за любые советы по решению этой проблемы. Заранее спасибо!


person TheBoro    schedule 29.06.2016    source источник
comment
Какую именно программу вы пытаетесь выполнить?   -  person Aya    schedule 29.06.2016
comment
idl — это язык программирования. Таким образом, команда «idl» запускает приглашение командной строки idl, аналогично вводу «python». Затем следующие команды должны скомпилировать и запустить скрипт.   -  person TheBoro    schedule 29.06.2016
comment
Существует множество реализаций IDL. Можете ли вы предоставить ссылку на версию, которую вы используете?   -  person Aya    schedule 29.06.2016
comment
Я думаю, что теперь у меня есть решение, но в любом случае спасибо за это. Он использовал IDL 8.2   -  person TheBoro    schedule 29.06.2016


Ответы (2)


Если у вас IDL 8.5 или новее, он поставляется со встроенным мостом IDL-Python. Тогда ваш код будет выглядеть примерно так:

from idlpy import *
IDL.idlcode()

Надеюсь это поможет.

person Chris Torrence    schedule 30.06.2016

Поэтому я разработал решение, которое, кажется, хорошо работает для этой проблемы. Вышеупомянутая проблема заключалась в использовании функции os.system для выполнения действий, которые она не могла выполнить. Мой новый код:

import os
import subprocess

os.system("python python_code1.py")

p=subprocess.Popen("idl", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(".com idlcode.pro\n")
p.stdin.write("idlcode\n")
p.stdin.write("exit")
p.wait()
os.system("python python_code2.py")
os.system("python python_code3.py")
person TheBoro    schedule 29.06.2016