0

このスクリプトは、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 であり、私はこのスクリプトを何時間も前に釘付けにしたと思っていました。

私は一体何を間違っているのですか?

4

2 に答える 2

1

まず第一に、Python に固執するのが良い選択です (これを参照してください。特に、漫画の上にマウスを置いたときの「Alt」テキストを参照してください)。

多分あなたは試すことができます:

if std_out.strip("\"").strip() == "":

これにより、文字列が「」のよう'""'になり、' ""'すべてが「」のようになります。

とにかく、PyDev が別の結果を出すのは奇妙に思えます。

于 2013-01-11T08:18:04.757 に答える
0

これらの場合と同様に、答えは通常「魚」です...ここで完成させるために答えを示します。

Windows コマンド プロンプトでコマンドを実行する場合は、コマンドの名前を指定するだけで十分に思えますが、Eclipse 内で同じ実行を繰り返す場合は、拡張子を指定する必要があります。上記の私の例'c:/rational/clearcase/bin/cleartool'では、完全に正しい場所を使用しています'c:/rational/clearcase/bin/cleartool.exe'。エクステンション付き。

Eclipse には、これらのことにこだわる、より「UNIX」に似た環境があります。これは、コマンドが見つからなかったため、私の実行が Eclipse で失敗していたことを意味します。

于 2013-01-11T11:08:05.013 に答える