1

Pythonサブプロセスを使用して次のコマンドを実行しようとしています

/usr/atria/bin/cleartool find <path> -follow -name '*.elf' -version "lbtype(CXC1111-111)" -print

コードスニペット:

cmd = [clt, 'find', path, '-follow', '-name', '\"*.elf\"', '-version', lb, "-print"]
try:         
    output = subprocess.check_output(cmd)

    print("--%s--" % output)
    print("===DONE===")
except subprocess.CalledProcessError as e:
    print("CALLEDPROCESSERROR")
    print(e)
except subprocess.TimeoutExpired as e:
    print(e)

スニペット実行後の o/p

--b''--

===DONE===

cleartool findコマンドがシェルで実行されると、ファイル名が出力されます

理想的には、Python スクリプトの出力でファイル名を出力する必要があります。これがうまくいかないアイデアはありますか?

4

3 に答える 3

1

私は問題を理解したと思います。

解決する前に、これが私の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===

ケース 1 ではなく、ケース 2 で lbtype について文句を言う clearcase の理由。

于 2013-07-11T08:10:38.450 に答える