【发布时间】: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