【问题标题】:C#: same command using command-line and c# code not workingC#:使用命令行和 C# 代码的相同命令不起作用
【发布时间】:2019-09-19 08:33:59
【问题描述】:

所以我在这个文件夹中有python 项目:C:\root,在这个path 中有这个文件:C:\root\\my_class.py 来自command-line

cd C:\root

然后运行我的代码:

python my_class.py -p C:\Regression -a some_value -n HW

所以从命令行这工作正常,但现在我想从 c# 代码运行它并读取输出:

更改目录:

    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.WorkingDirectory = @"C:\root";
    p.StartInfo.UseShellExecute = false;
    p.Start();

运行我的命令

    string pythonPath = @"C:\Python37\python.exe";
    string command = "C:\root\\my_class.py -p C:\\Regression -a some_value -n HW";

    Process process = new Process();
    process.StartInfo.FileName = pythonPath;
    process.StartInfo.Arguments = command;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.Start();
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();
    process.WaitForExit();
    Console.ReadLine();

所以在这种情况下,当我使用c# 启动这个命令时,我得到了这个error

C:\Python37\python.exe: 无法打开文件 'C:\root\my_class.py': [Errno 22] 无效参数

【问题讨论】:

  • 在“运行我的命令”代码块的第二行中,C: 之后有一个回车,因为您未能转义反斜杠。另外,我真的不确定您的“更改目录”块是什么意思。它在某个特定目录中运行cmd.exe,但这并没有说明 your 进程的当前目录,也没有说明您以后启动的任何其他进程。
  • @Damien_The_Unbeliever:我确实想知道这是不是因为错误消息而打错了。
  • @PaulF - 如果它“只是”问题中的一个错字,那么我们有 OP 从未运行过的代码,所以他们不知道它是否会产生他们所询问的相同问题,这使得无论哪种方式都同样成问题。
  • @Damien_The_Unbeliever: 测试了上面的代码 & 错误信息是 "C:\..\python.exe: can't open file 'C:'"

标签: c# command-line process


【解决方案1】:

你已经在这一行指定了可执行文件string pythonPath = "C:\Python37\python.exe";

我猜你不需要在你的命令中再次使用pythonstring command = "python C:\root\\my_class.py -p C:\\Regression -a some_value -n HW";

另外,您在命令中混合了斜杠,请尝试将您的命令字符串设置为:

string command = "C:\\root\\my_class.py -p C:\\Regression -a some_value -n HW";

string command = @"C:\root\my_class.py -p C:\Regression -a some_value -n HW";

【讨论】:

  • 我看不出你的代码和我的代码有什么不同(我可能遗漏了一些东西)
  • 不要使用python 两次,所有斜线必须转义或字符串必须用@-引号括起来。在C:\root 中的代码斜杠没有转义
猜你喜欢
  • 1970-01-01
  • 2017-03-01
  • 2011-06-03
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
相关资源
最近更新 更多