从c#执行Python脚本的长路径

时间:2016-10-11 17:52:21

标签: c# python

我正在尝试从C#程序运行Python脚本。我使用Microsoft的官方文档:https://code.msdn.microsoft.com/windowsdesktop/C-and-Python-interprocess-171378ee当我将短文件路径作为命令参数传递给我的Python脚本时,它可以正常工作。但是当我输入相同Python脚本的长路径时,进程会运行,但脚本不会执行。怎么了?这是我使用的代码:

using System;
using System.IO;
using System.Diagnostics;

namespace CallPython
{
    class Program
    {
        static void Main(string[] args)
        {
            // full path of python interpreter 
            string python = @"C:\Anaconda2\python.exe";

            // This path will work
            string myPythonApp = @"C:\MyPython\helloworld.py";
            // This path will cause program to fail, nothing response 
            string myPythonApp = "C:\\Users\\My Name\\Documents\\Visual Studio 2015\\Projects\\My Project Name\\helloworld.py";

            // Create new process start info 
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(python);

            // make sure we can read the output from stdout 
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;

            myProcessStartInfo.Arguments = myPythonApp;

            Process myProcess = new Process();
            // assign start information to the process 
            myProcess.StartInfo = myProcessStartInfo;

            Debug.WriteLine("Calling Python script: " + myPythonApp);
            // start the process 
            myProcess.Start();

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadLine();

            myProcess.WaitForExit();
            myProcess.Close();

            // write the output we got from python app 
            Debug.WriteLine("Value received from script: " + myString);

        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您的路径拼写错误,可能会导致此错误。要动态创建路径,您可以尝试使用以下内容:

  1. 您可以尝试:

    Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).
    

    这将返回文档文件夹的路径 (如果其他用户将使用该程序,将正确生成路径)。 因此,您可以将这部分路径:“C:\ Users \ My Name \ Documents \”留给编译器。从这里开始,您可以继续构建脚本的路径。

  2. 你可以尝试:

    string path = "script.py";
    

    如果您将此作为路径,则会从此处读取文件

  3. “C:\ Users \ My Name \ Documents \ Visual Studio 2015 \ Projects \ My Project Name \ My Project Name \ bin \ Debug \ script.py

    或您的可执行文件所在的位置。

    1. 您可以使用Directory.GetParrent()Directory.GetCurrentDirectory()获取当前路径并移至parrent目录,然后返回到存储它的脚本。
    2.   

      这些选项可以更轻松地创建路径动态。

           

      看看这个目录类的页面有一些很好的功能:   http://msdn.microsoft.com/en-us/library/system.io.directory.aspx

           

      或者包括一些漂亮的feuaters产生路径的envoirment类:   https://msdn.microsoft.com/en-us/library/system.environment(v=vs.110).aspx