Ce genre de question a déjà été posé à des degrés divers, mais j'ai l'impression qu'on n'y a pas répondu de manière concise et je la pose donc à nouveau.
Je veux exécuter un script en Python. Disons que c'est ça :
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Qui obtient l'emplacement d'un fichier, le lit, puis imprime son contenu. Pas si compliqué.
Ok, alors comment je fais pour exécuter ça en C# ?
C'est ce que j'ai maintenant :
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);
}
}
}
Quand je passe le code.py
l'emplacement comme cmd
et le filename
l'emplacement comme args
ça ne marche pas. On m'a dit que je devais passer python.exe
comme le cmd
et ensuite code.py filename
comme le args
.
Cela fait un moment que je cherche et je ne trouve que des gens qui suggèrent d'utiliser IronPython ou autre. Mais il doit bien exister un moyen d'appeler un script Python depuis C#.
Quelques précisions :
Je dois l'exécuter à partir de C#, je dois capturer la sortie, et je ne peux pas utiliser IronPython ou autre. Quel que soit le hack que vous avez, ça ira.
P.S. : Le code Python que j'exécute est beaucoup plus complexe que cela, et il renvoie une sortie dont j'ai besoin en C#, et le code C# appellera constamment le code Python.
Faites comme si c'était mon code :
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}