标签: p4python

文件不在客户端上

自从我开始实现工作空间感知以来,我遇到了一个非常奇怪的P4Python问题.

情况如下:

我有一个"P4Commands"模块,它继承了P4并连接在 __init__()

然后,我分别有以下几个类:

  • P4USER
  • P4Workspace
  • P4Changelist

P4Commands模块继承P4并调用其父级的"run"方法,同时还注入了我实现的一些自定义缓存,以加速大量调用.run方法被调用如下:

result = super(P4Commands, self).run(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后记录并返回.

当我在一个文件上调用一个操作时,我首先通过P4User来确定该文件所在的工作空间.然后,我在找到匹配的工作空间实例上执行以下操作:

def run(self, *args, **kwargs):
    # run whatever commands have to be run, with client temporarily set 
    # to this instance's client setting.
    with self.FUNCS.saved_context(client=self.client) as _:
        return self.FUNCS.run(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

其中FUNCS是P4Commands模块实例.

我得到的问题是,当我在其上调用fstat时返回信息的文件,我将"文件不在客户端上"作为错误,只有当我调用"编辑"命令时.其他所有命令(add,fstat,where等)似乎都能正常工作.这只发生在编辑命令上.

奇怪的是,当我使用完全相同的参数运行方法时,我没有得到错误,但是在工作空间上下文管理器之外(直接在P4User模块上).

它变得更加怪异:我尝试禁用上下文管理器,仍然没有乐趣.

还有一件事要添加到古怪,在阅读本文时,你可能会想"哦,客户端没有正确设置".我尝试记录客户端工作区,并且正确设置和取消设置.就像我说的,所有其他命令都有效,只是没有编辑.

剩下的唯一情况是多个P4模块实例的连接正在干扰.我尝试将P4Commands设置为静态全局,每个模块只共享一个实例.这也没有结束.

我尝试了各种方法,但此时我有点卡住了.有没有人知道如何解决这个问题?

python p4python

7
推荐指数
1
解决办法
265
查看次数

在Python2.7中,未定义的符号导入P4API

在RHEL5(5.3)上我安装了python27,python27-devel,setuptools,gcc44,gcc44-c ++和P4PythonInstaller.所有看似安装都很好,没有报告错误.

但是,当我打开Python2.7并尝试导入P4或P4API时,我收到以下错误:

ImportError: /usr/lib64/python2.7/site-packages/P4API.so: undefined symbol: _ZNSo9_M_insertI1EERSoT_
Run Code Online (Sandbox Code Playgroud)

这看起来像一个错误的名称,但我不清楚原始名称可能是什么(除了"插入"),或它可能需要的库.

我尝试用LD_DEBUG = libs运行python,它似乎找到了它正在寻找的所有库.

有什么可能出错的想法?谷歌今晚没有帮助我.

提前致谢!

更新:

我尝试使用Linux26x86_64版本的P4API从源代码构建P4Python,但我仍然收到同样的错误.

更新2:

ldd P4API.so生成的库上运行时,我得到以下内容:

librt.so.1 => /lib64/librt.so.1 (0x00002b09f166a000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00002b09f1873000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b09f1c36000)
libm.so.6 => /lib64/libm.so.6 (0x00002b09f1f37000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b09f21ba000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b09f23c8000)
libc.so.6 => /lib64/libc.so.6 (0x00002b09f25e5000)
/lib64/ld-linux-x86-64.so.2 (0x00002b09f10c0000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b09f293d000)
libutil.so.1 => /lib64/libutil.so.1 (0x00002b09f2b41000) 
Run Code Online (Sandbox Code Playgroud)

这是编译器输出:

API Release 2012.1
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
copying P4.py -> build/lib.linux-x86_64-2.7
running build_ext
building 'P4API' extension …
Run Code Online (Sandbox Code Playgroud)

python centos5 p4python rhel5

6
推荐指数
1
解决办法
1133
查看次数

导入 P4API 在 win 64、python 3.5.1 上失败

运行 import P4 时出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\site-packages\P4.py", line 410, in <module>
    import P4API
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

我在网上查看但找不到有帮助的东西。

python p4python

5
推荐指数
1
解决办法
763
查看次数

在没有 SSL 支持的情况下无法构建 P4Python win 10

尝试使用 cmd 在 Windows 10 上安装 p4python:

pip install p4python
Run Code Online (Sandbox Code Playgroud)

并得到

使用缓存的 https://files.pythonhosted.org/packages/36/5a/0a1b192cdecd31cb8bc0d0ba39c73ffd84ce823053d0004823a1fdbe1440/p4python-2018.2.1743033.tar.gz 命令 python setup.py Egg_info 的完整输出:尝试从 ftp.per 加载 API已加载API 为 None ...无法在没有 SSL 支持的情况下构建 P4Python

perforce pip p4python

5
推荐指数
1
解决办法
5482
查看次数

如何获得P4Python中的更改类型

我正在尝试使用P4Python,并希望找到一种方法来检查更改列表中每个文件的更改类型.我的意思是,我想知道它是否是一个修改,或者该文件是否标记为添加标记为删除.

我的代码是这样的

    p4.connect()
    clientSpec = p4.fetch_client()
    depotList = p4.run_opened("-c", changelistNumber)
    p4.disconnect()
Run Code Online (Sandbox Code Playgroud)

所以,我有变更列表中的文件列表,现在我可以迭代它们,我希望删除那些标记为删除的文件.

非常感谢您的帮助!

python perforce p4python

2
推荐指数
1
解决办法
831
查看次数

p4 describe需要等效的python命令

p4 describe #cl在p4 python中我需要等效的.

但是,p4.run_describe("#cl")使用p4python 运行相同的命令.我得到了dict:

[{'client': 'NonDev1408-Dev', 'digest': ['E41FFB100C73F7B443EE8DE7A0DD966C'], 'desc': 'Merging //ATTE/1507_SWP122 to OCX Main (//ATTE/1408-Dev)\n', 'type': ['text'], 'fileSize': ['33067'], 'status': 'submitted', 'rev': ['49'], 'depotFile': ['//ATTE/1408-Dev/cust/oms/bb/cord9src/src/main/java/amdocs/oms/cust/osact/foundation/NegotiateServiceConnection.java'], 'action': ['integrate'], 'user': 'mohitc', 'change': '243446', 'time': '1432731112', 'path': '//ATTE/1408-Dev/cust/oms/bb/cord9src/src/main/java/amdocs/oms/cust/osact/foundation/*', 'changeType': 'public'}]
Run Code Online (Sandbox Code Playgroud)

相反,我希望输出像这样p4 describe 243446,我想在受影响的文件之间进行差异更改:

Change 243446 by mohitc@NonDev1408-Dev on 2015/05/27 15:51:52

        Merging //ATTE/1507_SWP122 to OCX Main (//ATTE/1408-Dev)

Affected files ...

... //ATTE/1408-Dev/cust/oms/bb/cord9src/src/main/java/amdocs/oms/cust/osact/foundation/NegotiateServiceConnection.java#49 integrate

Differences ...

==== //ATTE/1408-Dev/cust/oms/bb/cord9src/src/main/java/amdocs/oms/cust/osact/foundation/NegotiateServiceConnection.java#49 (text) ====
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以使用p4python生成相同的输出?

python perforce p4python

1
推荐指数
1
解决办法
1212
查看次数

如何在不同步的情况下通过p4python读取仓库的文件夹结构?

我想读取P4软件仓库中指定文件夹路径内的文件夹和文件结构,而不进行同步。可能吗?

python perforce p4python python-2.7

1
推荐指数
1
解决办法
1104
查看次数

标签 统计

p4python ×7

python ×6

perforce ×4

centos5 ×1

pip ×1

python-2.7 ×1

rhel5 ×1