Diese Art von Frage wurde schon früher in unterschiedlichem Maße gestellt, aber ich habe das Gefühl, dass sie nicht präzise beantwortet wurde, und deshalb stelle ich sie erneut.
Ich möchte ein Skript in Python ausführen. Nehmen wir an, es ist das:
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Wer bekommt einen Dateispeicherort, liest ihn und druckt dann seinen Inhalt. Nicht so kompliziert.
Okay, wie führe ich das in C # aus?
Das habe ich jetzt:
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);
}
}
}
Wenn ich den code.py
Ort als cmd
und den filename
Ort übergebe args
, funktioniert es nicht. Mir wurde gesagt, ich sollte python.exe
als der cmd
und dann code.py filename
als der passieren args
.
Ich habe jetzt schon eine Weile gesucht und kann nur Leute finden, die vorschlagen, IronPython oder ähnliches zu verwenden. Es muss jedoch eine Möglichkeit geben, ein Python-Skript von C # aus aufzurufen.
Einige Klarstellungen:
Ich muss es von C # aus ausführen, ich muss die Ausgabe erfassen und ich kann IronPython oder irgendetwas anderes nicht verwenden. Welchen Hack du auch hast, es wird gut.
PS: Der tatsächliche Python-Code, den ich ausführe, ist viel komplexer als dieser und gibt die Ausgabe zurück, die ich in C # benötige, und der C # -Code ruft ständig den Python-Code auf.
Stellen Sie sich vor, dies ist mein Code:
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}