我目前正试图"转换"我写给C#的bash脚本。 这个脚本在shell中启动一个程序,然后在这个shell中执行一些命令,看起来类似于:
cd /$MYPATH
./executible -s << EOF
start_source_probe -hardware_name "USB" -device_name "@1: EP3C(10|5)"
write_source_data -instance_index 0 -value "11111"
write_source_data -instance_index 0 -value "10111"
write_source_data -instance_index 0 -value "00111"
exit
EOF
现在我想使用Visual Studio C#做同样的事情。 目前我的尝试看起来像这样:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = "pathToExe\\";
startInfo.FileName= "executible.exe";
startInfo.Arguments= "-s";
//startInfo.UseShellExecute = false;
//startInfo.RedirectStandardInput = true;
Process proc = new Process();
proc.StartInfo = startInfo;
proc.Start();
//StreamWriter myStreamWriter = proc.StandardInput;
//Console.WriteLine("start_source_probe - hardware_name \"USB\" -device_name \"@1: EP3C(10|5)\"");
//Console.WriteLine("write_source_data -instance_index 0 -value \"11111\"");
proc.WaitForExit();
激活注释(因此在代码中使用#34; //&#34;)我设法打开shell(-s代表shell)但我想知道我是如何在这个shell中执行命令的另外。 我设法用这样的东西执行多个命令(只要我没有启动shell,因为目标输出不同我猜)
const string strCmdText = "/C command1&command2";
Process.Start("CMD.exe", strCmdText);
如果有人能告诉我如何添加参数&#34; -s&#34;我将不胜感激。并在启动过程中执行命令。
答案 0 :(得分:1)
我不确定我是否理解了您的问题,但您可以在c#代码之外创建一个批处理文件,并从您的c#代码中调用它,如下所示:
def primeCheck(n):
x = math.floor(math.sqrt(n))
if (n <= 1):
return False
for i in range(2,x+1):
if n%i == 0:
return False
return True
我添加了System.Diagnostics.ProcessStartInfo ProcStartInfo = new System.Diagnostics.ProcessStartInfo("cmd");
ProcStartInfo.RedirectStandardOutput = true;
ProcStartInfo.UseShellExecute = false;
ProcStartInfo.CreateNoWindow = false;
ProcStartInfo.RedirectStandardError = true;
System.Diagnostics.Process MyProcess = new System.Diagnostics.Process();
ProcStartInfo.Arguments = "/c start /wait batch.bat ";
MyProcess.StartInfo = ProcStartInfo;
MyProcess.Start();
MyProcess.WaitForExit();
所以你的c#代码将等待你的批处理完成,以追求c#代码执行