このスクリプトは、Clearcase をサポートする簡単なスクリプトであるはずでした。Perl をダンプすることにしたので、これが Python での最初の作業です。
subprocess.Popen/communicate は、空の文字列を返す Clearcase コマンドを実行するために呼び出されますが、この戻り値を正確にテストすることはできません。
import subprocess
import sys
# cleartool descr -fmt "%Sn" foo.c
# returns the version number of the file if it's under CC control:
# b'"\\main\\hb_clearcase\\oint_uas_umac_03\\25"'
# or nothing if it's hijacked.
std_out = subprocess.Popen(['c:/rational/clearcase/bin/cleartool', 'desc',
'-fmt', '"%Sn"', 'foo.c'], stdout=subprocess.PIPE).communicate()
std_out = std_out.decode("utf-8")
print(std_out)
# prints: ""
# Here it goes wrong, I have tried many options in the if...
# The file IS hijacked, the std_out string IS empty.
if std_out == "":
print('File is hijacked')
else
print('File is not hijacked')
驚異的なのはif std_dev == ""
、スクリプトを DOS ボックスで直接実行する場合と Eclipse の PyDev で実行する場合の比較の動作の違いです。彼らは常に反対の結果を返すようです。上記のように、これは PyDev では期待どおりに (つまり、ハイジャックされて) 動作しますが、コマンド プロンプトでは失敗します。比較するif std_dev == '""'
と、PyDev は期待どおりの結果を提供しますが、コマンド プロンプトは提供しません。
これは Win7 上の最新の Python 3.3 であり、私はこのスクリプトを何時間も前に釘付けにしたと思っていました。
私は一体何を間違っているのですか?