Tego rodzaju pytanie zadawano już wcześniej w różnym stopniu, ale wydaje mi się, że nie udzielono na nie zwięzłej odpowiedzi, więc zadaję je ponownie.
Chcę uruchomić skrypt w Pythonie. Powiedzmy, że to tak:
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Który pobiera lokalizację pliku, czyta go, a następnie drukuje jego zawartość. Nie jest to takie skomplikowane.
Dobrze, więc jak mam to uruchomić w C #?
Oto, co mam teraz:
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);
}
}
}
Kiedy podaję code.py
lokalizację jako cmd
i filename
lokalizację, ponieważ args
nie działa. Powiedziano mi, że powinienem przejść python.exe
jako cmd
, a potem code.py filename
jako args
.
Szukałem już od jakiegoś czasu i mogę znaleźć tylko osoby sugerujące użycie IronPythona lub czegoś podobnego. Ale musi istnieć sposób na wywołanie skryptu w Pythonie z C #.
Kilka wyjaśnień:
Muszę uruchomić go z C #, muszę przechwycić dane wyjściowe i nie mogę używać IronPython ani niczego innego. Niezależnie od tego, jaki hack masz, będzie dobrze.
PS: Rzeczywisty kod Pythona, który uruchamiam, jest znacznie bardziej złożony i zwraca dane wyjściowe, których potrzebuję w C #, a kod C # będzie stale wywoływał kod Pythona.
Udawaj, że to mój kod:
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}