Ce genre de question a déjà été posé à des degrés divers, mais j'estime qu'il n'y a pas eu de réponse concise et je la pose donc à nouveau.
Je souhaite exécuter un script en Python. Disons que c'est ceci:
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Qui obtient un emplacement de fichier, le lit, puis imprime son contenu. Pas si compliqué.
D'accord, alors comment puis-je l'exécuter en C #?
Voici 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 l' code.pyemplacement au fur cmdet à mesure et l' filenameemplacement car argscela ne fonctionne pas. On m'a dit que je devrais passer python.exepour le cmd, puis code.py filenamecomme le args.
Je cherche depuis un moment maintenant et je ne peux trouver que des personnes suggérant d'utiliser IronPython ou autre. Mais il doit y avoir un moyen d'appeler un script Python à partir de 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 quoi que ce soit d'autre. Quel que soit le hack que vous avez, ce sera bien.
PS: Le code Python que j'exécute est beaucoup plus complexe que cela, et il renvoie la sortie dont j'ai besoin en C #, et le code C # appellera constamment le code Python.
Prétendez que c'est mon code:
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}