如何启动外部程序更改目录

How to launch an external program changing directory

我必须从另一个文件夹启动 Python。 为此,我必须更改文件夹。就像我做了 Cd ..pythonPath... 我做的任务是:

  1. 从环境变量中获取Python路径

     string strPath = Environment.GetEnvironmentVariable("Path");
     string[] splitPath = strPath.Split(';');
     string strPythonPath = String.Empty;
     foreach (string path in splitPath)
     {
        if (path.ToUpper().Contains("PYTHON"))
        {
            strPythonPath = path;
            break;
        }
     }
    
  2. 这样我就得到了脚本文件夹,所以我向上移动了一个

     strPythonPath =  Path.GetFullPath( Path.Combine(strPythonPath, ".."));
    
  3. 我启动外部进程

     Process ExternalProcess = new Process();        
     ExternalProcess.StartInfo.FileName = "Phyton.exe";
     string strPythonScript = @"C:\temp\script.py";
     string strTestPool = "testPool.xml";
     ExternalProcess.StartInfo.WorkingDirectory = strPythonPath;
     ExternalProcess.StartInfo.Arguments = strPythonScript + " " + strTestPool + " " + strTemp;
     ExternalProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
     ExternalProcess.Start();
     ExternalProcess.WaitForExit();
    

这样我就找不到指定的文件了。 当然我也可以把完整的路径放在

    ExternalProcess.StartInfo.FileName = " C:\Program Files\Python39\Phyton.exe";

但这是正确的做法吗?

再一次我想要的是像做事一样预先移动

cd  C:\Program Files\Python39

另外它是否可以成为 Directory.SetCurrentDirectory(...) 解决方案?

谢谢

每个进程都有自己的工作目录,默认继承自父进程。在您的问题中,您提到了两个工作目录。

  1. ExternalProcess.StartInfo.WorkingDirectory = strPythonPath;

  2. Directory.SetCurrentDirectory(...)

第一个属于外部进程,第二个属于当前进程。当您启动外部进程 (pyhton.exe) 时,如果文件名不是绝对路径,则当前进程将尝试从其工作目录(第二个)搜索可执行文件。 (其实规则很复杂,这里简化了)。外部进程启动后,其工作目录(1st)接管该位置。

总之,你可以使用SetCurrentDirectory或绝对FileName,只是注意SetCurrentDirectory会影响后面的过程。