使用命令行参数

时间:2017-05-02 13:18:23

标签: c# python-2.7 process

如何从C#运行此python 2.7代码(文件名为myPythonScript.py):

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-sd', '-start_date', help='start date to download data')
    parser.add_argument(
        '-ed', '-end_date', help='end date to download data')
    args = parser.parse_args()
    #print(args.accumulate(args.start_date))    
    print(args.sd, args.ed)

上面的代码只有两个日期作为命令行参数并显示给用户。我想将它作为来自C#的进程运行。 当我使用这个C#代码时,它运行脚本没有params好。但是当我添加params时,它找不到python文件。为什么?如何解决这个问题?

       ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = @"C:\Anaconda2\python.exe";
            // path to my python script 
            string appEXE = AppDomain.CurrentDomain.BaseDirectory;
            // this scripts runs without params
            python_script_name = @"myPythonScript.py -sd 01/01/2015 -ed 05/09/2017";
            startInfo.Arguments="\""+appEXE+ "Python\\"+ python_script_name + "\"";
            startInfo.UseShellExecute = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.CreateNoWindow = true;
            startInfo.RedirectStandardError = true;
            using (Process process = Process.Start(startInfo))
            {
                using (StreamReader reader = process.StandardOutput)
                {
                    string result = reader.ReadToEnd();
                    //MessageBox.Show("Normal results"+result);
                    Debug.WriteLine(result);
                }
                process.WaitForExit();
                // This will show error: no such file or directory
                MessageBox.Show("Errors"+process.StandardError.ReadToEnd());
                GC.Collect();

1 个答案:

答案 0 :(得分:0)

尝试以下几行:

        string scriptPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Python", "myPythonScript.py")

        startInfo.Arguments = "\"" + scriptPath + "\"" + " -sd 01/01/2015 -ed 05/09/2017"

我认为您的引号存在问题。