2016-03-21 20 views
0

Eğlenmek için bir mini Python IDE yapıyorum. Neden olmasın. Bu yüzden C# dan bir python betiğini çağırmak istiyorum ve şu anda sadece basit bir senaryoyu test ediyorum. Bu profesyonel IDE'nin muhtemelen nasıl çalıştığını bilmiyorum. Windows Form uygulaması üzerinde "run" butonuna tıklayın her C# içinde python komut dosyasını çağırmaya çalışıyor #

private void Run_Click(object sender, EventArgs e) 
    { 
     run_cmd("C:/Python34/python.exe", "C:/Users/Alaseel/Desktop/test.py"); 
    } 

    private void About_Click(object sender, EventArgs e) 
    { 
     // Open the about documentation 
    } 

    private void run_cmd(string cmd, string args) 
    { 
     ProcessStartInfo start = new ProcessStartInfo(); 
     start.FileName = "C:/Python34/python.exe"; 
     start.Arguments = string.Format("{0} {1}", cmd, 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); 
      } 
     } 
    } 

kısaca python.exe sonra kapanır çalışır. Geçtiğim dosyayı gerçekten çalıştırmıyor. Yanlış bir şey mi yapıyorum?

PS: run_cmd yöntemi BENIM DEĞİLDİR. Bu konuyu daha önce bir iş parçacığına baktım ve kodlarını kullandım. Ama bence yöntemi yanlış kullanıyorum.

Herhangi bir fikrin var mı? Teşekkür ederim!

cevap

2

Aslında bu durumda python.exe yolunu iki kez koyuyorsunuz. Sen cmd olarak buna sahip ve benzeri start.Filename

Sizin komut görünecektir: muhtemelen geçersiz komut hangisi "C:/Python34/python.exe" "C:/Python34/python.exe" "C:/Users/Alaseel/Desktop/test.py"

.

+0

Yardımlarınız için teşekkürler! Yöntem imzasını veya yöntem çağrısını nasıl yeniden yapılandırabilirim? – katie1245

+0

Bunu yapmanın farklı yolları vardır. Muhtemelen şöyle bir şey yapardım: start.FileName = cmd. Ve sonra, cmd'yi Argümanlar 'a geçemezsiniz, çünkü aradığınız programın argümanı değil, programın kendisi! Yani, start.Arguments = args. Bu işe yaramalı! (Ben test etmedim) – HammerHeart

İlgili konular