我想在命令行上编辑/创建一个工作区,而不弹出任何文本编辑器。文档说使用 -i 标志来使用标准输入。这种用法的语法/格式是什么?
传递文件正常工作: p4 client -i < fileDefiningTheWorkspace.txt
传递定义工作区的实际字符串不起作用: p4 client -i "Root: C:\The\Root\r\nOptions: noallwrite noclobber ....."
有任何想法吗?谢谢!
我想在命令行上编辑/创建一个工作区,而不弹出任何文本编辑器。文档说使用 -i 标志来使用标准输入。这种用法的语法/格式是什么?
传递文件正常工作: p4 client -i < fileDefiningTheWorkspace.txt
传递定义工作区的实际字符串不起作用: p4 client -i "Root: C:\The\Root\r\nOptions: noallwrite noclobber ....."
有任何想法吗?谢谢!
只是输入这样的字符串不会在标准输入中传递它。您需要指导一些输入,就像您传递文件的第一个示例一样。
如果您确实需要将字符串作为命令行的一部分,则需要使用 echo 之类的东西来管道输入适当的文本。但是 echo 不支持换行符,因此您需要分别回显每一行:
(回声线 1 和回声线 2 和回声线 3)| p4 客户端 -i
它很快就会变得非常丑陋。
正如您似乎真的很想知道如何从 c# 中执行此操作,这里有一个非常粗略且现成的示例,用于启动命令行进程并为其提供输入:
ProcessStartInfo s_info = new ProcessStartInfo(@"sort.exe");
s_info.RedirectStandardInput = true;
s_info.RedirectStandardOutput = true;
s_info.UseShellExecute = false;
Process proc = new Process();
proc.StartInfo = s_info;
proc.Start();
proc.StandardInput.WriteLine("123");
proc.StandardInput.WriteLine("abc");
proc.StandardInput.WriteLine("456");
proc.StandardInput.Close();
String output = proc.StandardOutput.ReadToEnd();
System.Console.Write(output);
在我处理了这个问题之后,解决方案看起来像这样:
P4Process.StartInfo.Arguments="client -i"
StreamWriter myStreamWriter = P4Process.StandardInput;
String inputText = File.ReadAllText(@"C:\Program Files\Perforce\clientSpec.txt");
myStreamWriter.Write(inputText);
P4Process.StandardInput.Close();
P4Process.BeginOutputReadLine();
P4Process.BeginErrorReadLine();
P4Process.WaitForExit();
对我来说,它与以下内容相同:
p4 client - i < clientSpec.txt