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.py
emplacement au fur cmd
et à mesure et l' filename
emplacement car args
cela ne fonctionne pas. On m'a dit que je devrais passer python.exe
pour le cmd
, puis code.py filename
comme 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);
}
}