我正在尝试从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);
}
}
}
答案 0 :(得分:0)
如果您的路径拼写错误,可能会导致此错误。要动态创建路径,您可以尝试使用以下内容:
您可以尝试:
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).
这将返回文档文件夹的路径 (如果其他用户将使用该程序,将正确生成路径)。 因此,您可以将这部分路径:“C:\ Users \ My Name \ Documents \”留给编译器。从这里开始,您可以继续构建脚本的路径。
你可以尝试:
string path = "script.py";
如果您将此作为路径,则会从此处读取文件
“C:\ Users \ My Name \ Documents \ Visual Studio 2015 \ Projects \ My Project Name \ My Project Name \ bin \ Debug \ script.py
或您的可执行文件所在的位置。
这些选项可以更轻松地创建路径动态。
看看这个目录类的页面有一些很好的功能: 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