2012-12-11 38 views
4

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

传递一个文件正常工作: P4客户-i < fileDefiningTheWorkspace.txt

传递定义工作区的实际字符串不起作用: P4客户-i“根:C:\中\ ROOT \ r \ n选项:noallwrite noclobber .....“

任何想法? 谢谢!

+0

高兴ÿ你问这个问题。谢谢! – asgs

回答

5

只需输入一个像这样的字符串将不会通过标准输入。您需要指导一些输入,就像您传递文件的第一个示例一样。

如果你确实需要字符串作为命令行的一部分,你需要使用类似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); 
+0

您可以使用here文档。 Bash在这里也有'<<<'你的信息''。 – tripleee

+0

感谢您的回答。我的最终目标是在c#中执行此操作,方法是在字符串中创建工作区详细信息,并将其传递给要运行的过程。我可以暂时将文件写入磁盘,然后像上面那样使用该文件(p4 client -i patrick

+1

从C#开始,为什么不直接使用API​​呢? – JasonD

0

我”后VE处理了我的情况下解决这个问题似乎是这样的:

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 
相关问题