Вам не нужно проходить через 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 не требуется.
Уловка заключается в том, чтобы сохранить последнюю строку, видимую в «удерживаемом пространстве».
sed -n '
/^xxxx/{n
n
x
d
}
x
1d
p
${x
p
}
' <input file>
Начиная с x
- поменять местами текущую строку ввода с удерживаемым пространством ( x
), то для первой строки ничего не печатать ( 1d
), последующие строки печатают строку, только что замененную из удерживаемого пространства ( p
), в последней строке снова поменяйте местами удерживаемое пространство и напечатайте, что в нем было ( $ x {xp}
. Остается, что делать, когда мы попадаем в целевую строку (начиная с / ^ xxxx /
]) - считайте следующие две строки в пространство шаблонов ( nn
) и поменяйте местами пространство шаблонов с пространством удержания ( x
) - это оставляет пространство удержания со следующей строкой, которую мы хотим для печати и пространство образца со строкой перед совпадением, что нам не нужно,поэтому мы бросаем его ( d
)
This is how I would do it in perl maybe it can help send you on the right track... Good luck!
open(INFILE,"<in.txt");
my(@arrayOutBoundData, $skipNextLine)l
for (<INFILE>) {
if (not $skipNextLine) {
if (/^xxxx$/) {
pop(@arrayOutBoundData);
$skipNextLine = 1;
} else {
push(@arrayOutBoundData,$_);
}
}
$skipNextLine = 0
}
open(OUTFILE,">out.txt");
for (@arrayOutBoundData) {
print OUTFILE;
}
(Not tested no perl on this system please forgive any over site.)
Вы можете проверить этот документ . Он описывает использование sed
для работы с несколькими строками.