Esse tipo de pergunta já foi feito em vários graus, mas acho que não foi respondido de maneira concisa e, portanto, pergunto novamente.
Eu quero executar um script em Python. Vamos dizer que é isso:
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Que obtém um local para o arquivo, lê e depois imprime seu conteúdo. Não é tão complicado.
Ok, então como executo isso em c #?
Isto é o que eu tenho agora:
private void run_cmd(string cmd, string args)
{
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);
}
}
}
Quando passo o code.py
local como cmd
e o filename
local como args
ele não funciona. Foi-me dito que eu deveria passar python.exe
como o cmd
, e depois code.py filename
como o args
.
Estou procurando há algum tempo e só consigo encontrar pessoas sugerindo o uso do IronPython ou algo assim. Mas deve haver uma maneira de chamar um script Python de C #.
Alguns esclarecimentos:
Preciso executá-lo em C #, preciso capturar a saída e não posso usar o IronPython ou qualquer outra coisa. Qualquer que seja o truque que você tenha, tudo ficará bem.
PS: O código Python atual que estou executando é muito mais complexo que isso, e retorna a saída que eu preciso em C #, e o código C # estará constantemente chamando o código Python.
Finja que este é o meu código:
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}