我已经成功调用了一个python脚本来自我在用c#编写的Windows窗体应用程序中的按钮,其代码如下:
private void login_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("C:\\Python27\\Scripts\\path\\file.py");
}
我现在想将一个变量传递给python脚本。我试过将它作为参数传递无效(在这样的PHP中工作):
private void login_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("C:\\Python27\\Scripts\\path\\file.py myVariable");
}
我使用此代码在visual studio编译器中没有收到任何错误,但是当我单击按钮启动python脚本时,我收到一条错误消息“Win32异常未处理 - 系统无法找到指定的文件”
我也试过这个无济于事 - How do I run a Python script from C#?
答案 0 :(得分:3)
您需要使用此处显示的开始信息。 http://www.dotnetperls.com/process-start
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "C:\\Python27\\Scripts\\path\\file.py";
startInfo.Arguments = "myvariable";
try
{
using (Process exeProcess = Process.Start(startInfo))
{
//dostuff
exeProcess.WaitForExit();
}
}
catch
{
//log
throw;
}
process.start返回的进程是非托管的,应该在using。
中引用答案 1 :(得分:2)
为了运行python脚本,您需要将脚本路径传递给python解释器。现在你要求Windows执行python脚本文件。这不是可执行文件,因此Windows无法启动它。
此外,您调用start的方式会使Windows尝试启动文件"file.py myVariable"
。你想要的是它运行"file.py"
并传递"myVariable"
作为参数。请尝试使用以下代码
Process.Start(
@"c:\path\to\python.exe",
@"C:\Python27\Scripts\path\file.py myVariable");
编辑
您的评论似乎要传递变量myVariable
的当前值而不是文字。如果是,请尝试以下
string arg = string.Format(@"C:\Python27\Scripts\path\file.py {0}", myVariable);
Process.Start(
@"c:\path\to\python.exe",
arg);