Perforce命令行:如何在“p4 client -i”中使用-i标志?

时间:2012-12-11 18:52:09

标签: c# command-line client perforce workspace

我想在命令行上编辑/创建一个工作区,而不会弹出任何文本编辑器。文档说使用-i标志来使用标准输入。这种用法的语法/格式是什么?

传递文件正常工作: p4客户端-i< fileDefiningTheWorkspace.txt

传递定义工作空间的实际字符串不起作用: p4 client -i“Root:C:\ The \ Root \ r \ nOptions:noallwrite noclobber .....”

有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:5)

输入类似的字符串不会在标准输入中传递它。您需要引导一些输入,就像您传递文件的第一个示例一样。

如果您确实需要将字符串作为命令行的一部分,则需要使用echo之类的方法来管理相应的文本。但是echo不支持换行符,因此您需要分别回显每一行:

(echo line1& echo line2& echo line3)| 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);

答案 1 :(得分:0)

在我处理了这个问题之后,解决方案看起来像这样:

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