C# 控制台应用中的 Python 脚本
首先,这个问题有点像这个:在C#中运行Python脚本不工作
我的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);
}
}
1 个回答
0
你提供的信息不太多。这里有一些可能导致你在从其他程序运行Python脚本时,行为和在控制台运行时不同的原因:
不同的环境
一个程序在创建时通常会继承它父程序的环境变量的副本,除非父程序特别设置了其他的东西。从你的控制台运行的Python进程可能继承的环境变量和从C#程序运行时继承的环境变量会有所不同。需要检查的重要变量包括:PATH(工作目录)、PYTHONPATH、PYTHONHOME、PYTHONUNBUFFERED,以及你的脚本特别读取的任何变量。
标准输入、输出和错误的重定向
标准的文件描述符(输入、输出和错误)在连接到控制台、文件或通过管道连接到另一个进程时,可能会表现得不同。
控制台的存在
可以通过编程的方式启动一个没有连接控制台的进程。如果你的子进程完全没有控制台,并且你没有重定向它的标准文件描述符,它在尝试读取或写入时可能会崩溃。
编辑 -我刚刚尝试创建一个win32的C#程序来调用一个基于控制台的Python脚本,但没有复现崩溃的情况——Python的控制台输出只是消失了。我记得之前遇到过这个问题,但不确定是什么因素组合导致的。值得调查一下,但我不能确定这就是你遇到的问题。