Я запутался. Я выполнял свой код для моей диссертации на виртуальной машине до нескольких месяцев 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 исполняемому файлу. Я полностью вне идей. У кого-нибудь есть предложения?