Две опции:
Вы можете проверить, что файл data.json
записывается в свою выходную папку (код из этого ответа ):
private bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null) stream.Close();
}
//file is not locked return
return false;
}
Вам не нужно проходить через cmd.exe. Сам интерпретатор Python является исполняемым; другими словами, он может быть запущен и выполнен напрямую. Аргументы для интерпретатора Python (например, путь + имя сценария, который должен быть выполнен) и требуемый рабочий каталог могут быть установлены через соответствующие свойства Process.StartInfo :
Process process = new Process();
process.StartInfo.FileName = "python.exe";
process.StartInfo.Arguments = "Python_Code.py";
process.StartInfo.WorkingDirectory = @"F:\Path";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();
Сейчас вам нужно только дождаться завершения интерпретатора Python (что означает, что он завершил выполнение скрипта python)
process.WaitForExit();
, и после завершения процесса Python просто проверьте, существует ли файл json / написано:
if (System.IO.File.Exists(pathToJsonFile))
{
... do stuff with json file ...
}
else
{
... json file does not exist, something went wrong...
}
Примечание: я сохранил здесь process.StartInfo.RedirectStandardOutput = true;
в своем примере кода, так как я не знаю, что ваша программа действительно сделает. Однако, если ваша программа не хочет обрабатывать вывод сценария, который обычно появляется в окне консоли, установка RedirectStandardOutput в в значение true не требуется.
Вы должны взглянуть на класс FileSystemWatcher
. Документация здесь .
Тогда вы можете сделать что-то вроде этого:
using (FileSystemWatcher watcher = new FileSystemWatcher())
{
watcher.Path = YourDirectory;
// Watch for changes in LastWrite time
watcher.NotifyFilter = NotifyFilters.LastWrite;
// Watch for the wanted file
watcher.Filter = "data.json";
// Add event handlers.
watcher.Created += WhateverYouWantToDo;
}