Как отправить вход в консоль, как будто пользователь вводит?

так случилось, что базовые данные в корзине s3, которые я использую для создания фрейма данных, содержат несколько папок, и я фильтровал определенную папку как часть моего фильтра. пример: spark.read.parquet (s3 bucket) .filter ('folder_name = "val"). Похоже, что спарк загружает все данные из корзины s3 в память исполнителя, а затем запускает фильтр. Вот почему это был взрыв, когда та же логика, что и запрос улья, выполняемый для внешней таблицы улья, указывающего на местоположение s3 с папкой в ​​виде столбца раздела, работала просто отлично. Мне пришлось удалить фильтр и прочитать конкретную папку, чтобы решить проблему .. spark.read.parquet (s3 bucket / folder = value) ..

7
задан David Basarab 11 August 2009 в 20:25
поделиться

4 ответа

Это походит на задачу для SendKeys(). Это не C#, но VBScript, но nontheless - Вы попросили некоторый способ автоматизировать его:

Set Shell = CreateObject("WScript.Shell")

Shell.Run "cmd.exe /k title RemoteControlShell"
WScript.Sleep 250

Shell.AppActivate "RemoteControlShell"
WScript.Sleep 250

Shell.SendKeys "dir{ENTER}"
1
ответ дан 7 December 2019 в 07:51
поделиться

Я выяснил, как отправить вход в консоль. Я использовал то, что сказал Jon Skeet. Я не на 100% уверен, что это - корректный способ реализовать это.

Если существуют какие-либо комментарии для создания этого лучше, я хотел бы здесь. Я сделал это только, чтобы видеть, мог ли я понять это.

Вот программа, я смотрел, который ожидал входной формы пользователь

class Program
{
    static void Main(string[] args)
    {
        // This is needed to wait for the other process to wire up.
        System.Threading.Thread.Sleep(2000);

        Console.WriteLine("Enter Pharse: ");

        string pharse = Console.ReadLine();

        Console.WriteLine("The password is '{0}'", pharse);


        Console.WriteLine("Press any key to exit. . .");
        string lastLine = Console.ReadLine();

        Console.WriteLine("Last Line is: '{0}'", lastLine);
    }
}

Это - консольное приложение, пишущее в другое

class Program
{
    static void Main(string[] args)
    {
        // Find the path of the Console to start
        string readFilePath = System.IO.Path.GetFullPath(@"..\..\..\ReadingConsole\bin\Debug\ReadingConsole.exe");

        ProcessStartInfo startInfo = new ProcessStartInfo(readFilePath);

        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardInput = true;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.CreateNoWindow = true;
        startInfo.UseShellExecute = false;

        Process readProcess = new Process();
        readProcess.StartInfo = startInfo;

        // This is the key to send data to the server that I found
        readProcess.OutputDataReceived += new DataReceivedEventHandler(readProcess_OutputDataReceived);

        // Start the process
        readProcess.Start();

        readProcess.BeginOutputReadLine();

        // Wait for other process to spin up
        System.Threading.Thread.Sleep(5000);

        // Send Hello World
        readProcess.StandardInput.WriteLine("Hello World");

        readProcess.StandardInput.WriteLine("Exit");

        readProcess.WaitForExit();
    }

    static void readProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        // Write what was sent in the event
        Console.WriteLine("Data Recieved at {1}: {0}", e.Data, DateTime.UtcNow.Ticks);
    }
}
5
ответ дан 7 December 2019 в 07:51
поделиться

Можно ли запустить программу (или cygwin) в рамках кода, с помощью ProcessStartInfo.RedirectStandardInput (и вывод/ошибка) для управления потоком данных?

1
ответ дан 7 December 2019 в 07:51
поделиться

У меня была подобная проблема некоторое время назад, cygwin должен записать немного полезной информации (точная функция cygwin, текст ошибки и код ошибки WINAPI) к потоку сообщений об ошибках, необходимо перенаправить его где-нибудь и считать то, что это пишет.

0
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: