0

这个脚本应该是一个快速的 Clearcase 支持脚本,这是我第一次使用 Python,因为我决定转储 Perl。

调用 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'where 是完全正确的'c:/rational/clearcase/bin/cleartool.exe',即。带扩展名。

Eclipse 有一个更像“UNIX”的环境,它对这些东西很挑剔。这意味着我的运行在 Eclipse 中失败,因为找不到该命令,生成的空字符串与我预期的相似,很难发现差异。

于 2013-01-11T11:08:05.013 回答