C# Процесс Выполнение, а не создание файлов, выполненных в сценарии python - PullRequest
0 голосов
/ 14 марта 2020

Я запутался. Я выполнял свой код для моей диссертации на виртуальной машине до нескольких месяцев go. Наконец-то я смог собрать последние данные, необходимые для моей диссертации, и мой код перестал работать над частью создания процесса. Я получаю нить выхода 0, без ошибок, ничего. В целях тестирования я скопировал и вставил команду из процесса и запустил ее в командной строке. Оно работает. Процесс начинается, но файлы не создаются. В сценарии python, когда он запускается с использованием той же команды в командной строке, он создает несколько файлов. Я попытался назначить рабочий каталог для процесса. Это не работает. Я добавил файл с именем DUMMY.txt в программу python, искал его на всем компьютере. Однако он не был создан, когда я позволил создать оболочку для процесса, который он явно запускает. Я чувствую, что есть что-то настолько простое, что мне не хватает. Кто-нибудь имеет представление о том, что происходит? Я почти весь день отлаживал и не добился никакого прогресса. Я не могу использовать Iron Python, потому что половина приложения находится в python, и единственная часть, где она не работает, находится здесь. Я хотел бы выяснить, что не так с этим произведением, и не нужно переделывать все остальное. Вот класс, который я использую для выполнения python кода:

    class executePython
{
    public string cmd { get; set; }     // path to python version executable
    public string args { get; set; }    // path to python script + args

    // Executes a python script and redirects output to console
    public void run_cmd()
    {
        ProcessStartInfo start = new ProcessStartInfo();
         start.FileName = cmd;
         start.Arguments = args;
         start.UseShellExecute = false;
         start.RedirectStandardOutput = true;



         using (Process process = Process.Start(start))
         {
             using (StreamReader reader = process.StandardOutput)
             {
                 string result = reader.ReadToEnd();
                 Console.Write(result);
             }
         } 
    }
}

Я использую conda для управления несколькими python средами, поэтому cmd становится путем к папке среды conda для указанных c python версия /python.exe. Аргументы - это путь к моему сценарию python вместе с аргументами команды, которые используются внутри сценария для создания файла.

Этот класс используется в другой части моего кода для вызова другого сценария python и это работает точно так, как задумано; однако по какой-то причине в этом конкретном сценарии он не работает, даже если сценарий выполняется так, как задумано, когда команда копируется из режима отладки в командную строку.

Пример работающего вызова:

        executePython prgm= new executePython();
        prgm.cmd = ConfigurationManager.AppSettings["python27Executable"].ToString(); // path to the python executable related to the python 2.7 version
        string args = scriptPath + " " + otherArgs;
        prgm.args = args ;  // path to the script + command arguments
        prgm.run_cmd();

Пример вызова, который не работает:

      executePython prgm= new executePython();

string trainTest = Path.Combine(parentPath,ConfigurationManager.AppSettings["ThisScriptPath"] + @"\main.py".ToString()) + " " +other args; 
                prgm.args = trainTest; // path to code --svm train file path target/train label test file path
                prgm.cmd = ConfigurationManager.AppSettings["python36Executable"].ToString(); // path to the python executable related to the python 3.6version
                prgm.run_cmd();

Думая, что, возможно, это были пути, я жестко закодировал пути, используя команду командной строки, которая работала, вызывая python. EXE из пути среды conda, а затем путь к сценарию + аргументы команды. Ничего не случилось. Я действительно озадачен этим. Я также вышел из визуального стержня ios и снова вошел в систему как администратор. Это не имеет значения.

Я также проверил, что path.combine работает как задумано. Результат приводит меня непосредственно к python исполняемому файлу. Я полностью вне идей. У кого-нибудь есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...