首先,这是一些(有些):Running a python script on C# not working
我的python脚本可以从命令行正确运行,但是当我从控制台应用程序运行它时,它无法正常运行。
我的python脚本假设从目录中获取所有.log文件并将它们分发到csv文件中。然后我想从我的C#控制台应用程序访问csv文件。在我运行python脚本的那一刻,它创建了文件然后退出。过去没有做任何事情。
这是我用来尝试和运行python脚本的代码。 (我不是也不想使用IronPython)。
public void runPythonScript()
{
ProcessStartInfo startInfo = new ProcessStartInfo("python");
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.FileName = @"C:\Python27\python.exe";
startInfo.Arguments = @"C:\Users\bmahnke\Desktop\Python-Files\python3.py";
try
{
using (Process prog = Process.Start(startInfo))
{
prog.WaitForExit();
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
答案 0 :(得分:0)
你没有给我们太多的帮助。以下是一些原因,当您从另一个程序运行Python脚本时,您可能会遇到与从控制台运行Python脚本时不同的行为:
进程通常在创建时继承其所有父级环境变量的副本,除非父级专门设置不同的东西。 Python进程从您的控制台shell进程继承的环境变量可能与从C#程序继承的环境变量不同,后者从其启动的任何内容继承。要检查的重要变量是PATH(工作目录),PYTHONPATH,PYTHONHOME,PYTHONUNBUFFERED以及脚本专门读取的任何内容。
标准文件描述符的行为可能会有所不同,具体取决于它们是连接到控制台,文件还是通过管道传输到另一个进程。
可以在没有附加控制台的情况下以编程方式启动进程。如果您的子进程根本没有控制台,并且您没有重定向其标准文件描述符,则在尝试读取或写入它们时可能会崩溃。
编辑 - 我刚刚尝试通过创建一个win32 C#程序来调用基于控制台的Python脚本并且无法重现崩溃 - 来自Python的控制台输出刚刚消失在以太网中。我想我以前记得曾遇到过这方面的问题,但我不确定哪些因素可能导致问题。这可能值得调查,但我不能确定它会给你带来麻烦。