Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';cleartool查找-打印';内蟒蛇3';子进程。检查#u输出';返回空字符串_Python_Subprocess_Clearcase - Fatal编程技术网

Python ';cleartool查找-打印';内蟒蛇3';子进程。检查#u输出';返回空字符串

Python ';cleartool查找-打印';内蟒蛇3';子进程。检查#u输出';返回空字符串,python,subprocess,clearcase,Python,Subprocess,Clearcase,我正在尝试使用Python子进程运行以下命令 /usr/atria/bin/cleartool find <path> -follow -name '*.elf' -version "lbtype(CXC1111-111)" -print 运行代码段后的o/p --b''-- ===DONE=== 在shell上执行cleartool find命令时,将打印文件名 理想情况下,python脚本输出应该打印文件名。 有什么想法会出错吗?正如我在“先决条件”中提到的,必须从Clea

我正在尝试使用Python子进程运行以下命令

/usr/atria/bin/cleartool find <path> -follow -name '*.elf' -version "lbtype(CXC1111-111)" -print
运行代码段后的o/p

--b''--

===DONE===
在shell上执行
cleartool find
命令时,将打印文件名

理想情况下,python脚本输出应该打印文件名。 有什么想法会出错吗?

正如我在“先决条件”中提到的,必须从ClearCase视图(快照或动态)中执行
查找

您需要确保Python子流程:

  • 保持当前路径
  • 在该过程中安装vob(如果您使用的是动态视图)
提到了一个更简单的问题原因:

各种子流程调用的默认值为
shell=False


如果您的路径(在shell上)是/vobs,则尤其如此:这仅对已设置的视图有效,该视图生成自己的进程。有关更多信息,请参见“” 它也不允许像“
clt
”这样的别名工作(“
cleartool
”可能工作,
clt
”不是:请参见“”作为示例)

在动态视图中使用所述动态视图的完整路径进行尝试:

/view/aView/vobs/aVob/...
一个好的测试是首先让Python脚本执行以下操作:

  • cwd
    (当前工作目录)的打印
  • a
    cleartool lsvob
    (查看是否在动态视图中,是否在python子流程中)

    • 我想我已经解决了这个问题

      在解决方案之前,以下是我的lb和cmd的外观

      lb = '\"lbtype(%s-%s)\"' % (tmp_prod_no, rev)
      cmd = [clt, 'find', lm_path, '-follow', '-name', '\"*.elf\"', '-version', lb, "-print"]
      
      \“标签是问题的罪魁祸首 经过以下修改(lb和*.elf),它工作正常

      lb = 'lbtype(%s-%s)' % (tmp_prod_no, rev)
      cmd = [clt, 'find', lm_path, '-follow', '-name', '*.elf', '-version', lb, "-print"]
      
      有人能解释一下子流程如何处理命令中的引号吗。 下面是我尝试的不同组合和错误

      案例1-lb和elf的双引号

      lb = '\"lbtype(%s-%s)\"' % (tmp_prod_no, rev)
      cmd = [clt, 'find', lm_path, '-follow', '-name', '\"*.elf\"', '-version', lb, "-print"]
      
      o/p:
      --b''--
      ===DONE===
      
      案例2-elf的双引号

      lb = 'lbtype(%s-%s)' % (tmp_prod_no, rev)
      cmd = [clt, 'find', lm_path, '-follow', '-name', '\"*.elf\"', '-version', lb, "-print"]    
      
      o/p:
      cleartool: Error: Syntax error in query (near character 1).
      cleartool: Error: Invalid query: ""lbtype(CXC1727075-R78A12)""
      cleartool: Warning: Skipping   \vobs/cello/babs/control_test_dm/jpre_test_lm/bin/jpre_test.ppc.elf".
      CALLEDPROCESSERROR
      Command '['/usr/atria/bin/cleartool', 'find',   '/vobs/cello/babs/control_test_dm/jpre_test_lm', '-follow', '-name', '*.elf', '-version', '"lbtype(CXC1727075-R78A12)"', '-print']' returned non-zero exit status 1
      
      案例3-没有双引号给出正确答案

      lb = 'lbtype(%s-%s)' % (tmp_prod_no, rev)
      cmd = [clt, 'find', lm_path, '-follow', '-name', '*.elf', '-version', lb, "-print"]
      
      o/p:
      --b'\vobs\asd\asd\adasd'--
      ===DONE===
      

      为什么clearcase在案例2中抱怨lbtype而在案例1中没有。

      默认情况下,
      subprocess.Popen
      具有
      shell=False
      check\u output
      函数将其参数传递给
      Popen
      ,因此这里也会得到
      shell=False
      。不调用shell,每个参数都会被传递未解释为
      cleartool
      。从shell运行命令时:

      cleartool find ... -name '*.elf' -version "lbtype(CXC1111-111)" ...
      

      (为了使其更适合窗口,位被剪断),单引号和双引号被shell剥离,因此
      cleartool
      只得到
      *.elf
      lbtype(cxc111-111)
      。这些是您需要通过
      shell=False
      传递的字节序列。(保持
      shell=False
      可能是最好的;如果将其设置为
      True
      ,则必须将命令粘贴到单个字符串中,并引用shell元字符。)

      我用下面的行替换了cmd,得到了正确的输出cmd=[clt,“ls”,vobfile]因此,我相信与vlearcase视图相关的设置应该可以。@Hemanth或
      cleartool find
      以某种方式打印在stderr上而不是stdout上?关于cleartool的所有限制,您(当然)是对的,但这种情况下的问题要简单得多。:-)各种
      子流程
      调用的默认值是
      shell=False
      。顺便说一句,在以前的$orkplace中,我有一个附带项目,试图为ClearCase编写类似cvsps的内容。我在这里发现你关于CC的很多信息非常有用。(附带项目从来没有走到那么远,现在是“previous$orkplace”)“。不过,还是要从多站点的zippy merges追踪原始签入,呃。)@torek谢谢。有趣的是,我负责编写一个ClearCase到Git导入工具。该工作区也称为“上一个”;)很好,比下面我自己的答案更具体。所以+1.你对cleartool和shell的解释让我明白了。谢谢你的详细解释。
      cleartool find ... -name '*.elf' -version "lbtype(CXC1111-111)" ...