检查是不是安装了python
Posted
技术标签:
【中文标题】检查是不是安装了python【英文标题】:Check if python is installed检查是否安装了python 【发布时间】:2021-11-23 16:40:05 【问题描述】:我正在尝试使用 c#(作为 WinForms 应用程序的一部分)从 PC 获取已安装的 python 版本。 我试图通过在这两个线程 here 和 here 之后创建一个新的子进程来做到这一点,但似乎没有一个工作......
我已经尝试将流程构造函数的字段改为:
UseShellExecute = true
RedirectStandardOutput = false
CreateNoWindow = false
而且似乎Arguments
甚至没有传递给子进程,所以什么都不会输出..(它只是定期打开一个 cmd 窗口)
我错过了什么?
这是当前代码
这是一个粗略的初始代码,一旦我得到输出消息就会改变..
*这两种方法似乎都启动了 cmd 进程,但它只是卡住并且不输出任何内容,即使没有重定向。
private bool CheckPythonVersion()
string result = "";
//according to [1]
ProcessStartInfo pycheck = new ProcessStartInfo();
pycheck.FileName = @"cmd.exe"; // Specify exe name.
pycheck.Arguments = "python --version";
pycheck.UseShellExecute = false;
pycheck.RedirectStandardError = true;
pycheck.CreateNoWindow = true;
using (Process process = Process.Start(pycheck))
using (StreamReader reader = process.StandardError)
result = reader.ReadToEnd();
MessageBox.Show(result);
//according to [2]
var proc = new Process
StartInfo = new ProcessStartInfo
FileName = "cmd.exe",
Arguments = "python --version",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
;
proc.Start();
while (!proc.StandardOutput.EndOfStream)
result = proc.StandardOutput.ReadLine();
// do something with result
//for debug purposes only
MessageBox.Show(result);
if (!String.IsNullOrWhiteSpace(result))
MessageBox.Show(result);
return true;
return false;
【问题讨论】:
【参考方案1】:-
Python 是
python.exe
,所以可以直接运行。你不需要cmd.exe
。它只会让事情变得更复杂。
您重定向StandardError
,但这不是版本信息的写入位置。改为重定向StandardOutput
。
只有将 Python 添加到 %PATH%
环境变量中时,整个方法才有效。如果没有安装它,将找不到 Python。
考虑到 3. 适合我的代码:
void Main()
var p = new PythonCheck();
Console.WriteLine(p.Version());
class PythonCheck
public string Version()
string result = "";
ProcessStartInfo pycheck = new ProcessStartInfo();
pycheck.FileName = @"python.exe";
pycheck.Arguments = "--version";
pycheck.UseShellExecute = false;
pycheck.RedirectStandardOutput = true;
pycheck.CreateNoWindow = true;
using (Process process = Process.Start(pycheck))
using (StreamReader reader = process.StandardOutput)
result = reader.ReadToEnd();
return result;
输出:
Python 3.9.7
【讨论】:
1.我错过了。著名的。 2. 我确实尝试过,但没有成功(虽然使用 cmd) 3. 这里所有的 python 安装都是自动安装的,并添加了 %PATH% env.variable,所以我目前并不担心。但是为了将来参考(当然,如果你愿意的话),我该如何处理呢?谢谢! @ALWS34:你无法真正解决 %PATH% 问题,因为磁盘上可以安装数十个 Python 版本。基本上,每个虚拟环境都是 Python 的副本。找到所有这些需要完全不同的方法以上是关于检查是不是安装了python的主要内容,如果未能解决你的问题,请参考以下文章
如何检查是不是默认安装了 Python 包,或者我们是不是必须使用 PIP 安装它 [重复]
使用 python 子进程检查 pip 是不是安装在 Windows 上