Форум сайта python.su
В общем есть такая проблема.
Консольное дотнет приложение запускает Питона, перенаправляет на его стандартный ввод скрипт, который рисует график.
using System;
using System.Diagnostics;
using System.Threading;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static Process prc = new Process();
static void Main(string[] args)
{
prc.StartInfo.FileName = "c:/Python27/python.exe";
prc.StartInfo.Arguments = "";
prc.StartInfo.UseShellExecute = false;
prc.StartInfo.RedirectStandardInput = true;
//prc.StartInfo.RedirectStandardError = true;
//prc.StartInfo.RedirectStandardOutput = true;
prc.Start();
StreamWriter buf = prc.StandardInput;
buf.WriteLine("import matplotlib.pyplot as plt");
buf.WriteLine("plt.plot([1,3,2,4])");
buf.WriteLine("plt.show()");
buf.Close();
Console.ReadLine();
}
}
}
Отредактировано (Сен. 23, 2010 17:21:36)
Офлайн
Я не специалист по C#, но по идее у потокадолжна быть функция Flush: buf.Flush(). Это чтобы загнать питону все, что накопилось в потоке, ибо у него (у потока) есть свой собственный буфер.
Отредактировано (Сен. 23, 2010 17:32:12)
Офлайн
Пробовал - не работает. Только освобождение потока или закрытие приложения срабатывает.
Офлайн
А почему не используете IronPython и иже с ним?
Офлайн
regallПод него половины библиотек нету. Начиная от numpy.
А почему не используете IronPython и иже с ним?
Офлайн
Вот здесь та же сама проблема:
http://www.rsdn.ru/forum/dotnet/2731419.flat.aspx
Офлайн
IsemИ она тоже не решена.
Вот здесь та же сама проблема:
http://www.rsdn.ru/forum/dotnet/2731419.flat.aspx
Офлайн
Кое что начало вырисовываться. Консоль Питона - это не стандартный ввод/вывод, увы.
Чтобы получить данные из питона через стандартный консольный вывод нужно делать что-то вроде:
where = sys.stdout
print >>where, ‘что на выход’
Осталось понять как достучаться до консоли питона.
Офлайн
Итак, проблема успешно решена.
Вместо вызова консоли Питона, я запускаю в нём файл состоящий всего из трёх строк:
import sys
while True:
exec sys.stdin.readline()
Отредактировано (Сен. 24, 2010 08:26:54)
Офлайн
При желании можно ввести в переменную, которая будет выводить этот цикл из бесконечности, но проще прибивать процесс питона из родительского приложения.
Офлайн