2008-10-08 29 views
14

Tôi muốn viết một số tập lệnh trong python thực hiện một số thay đổi tự động đối với mã nguồn. Nếu kịch bản xác định nó cần phải thay đổi tập tin tôi muốn kiểm tra đầu tiên của nó. Tôi không quan tâm đến việc kiểm tra vì tôi sẽ luôn luôn muốn xây dựng và kiểm tra đầu tiên.Làm cách nào để kiểm tra tệp từ lực lượng trong python?

+0

Tôi đặt này ở đây vì vậy tôi có thể tìm kiếm nó trong tương lai :) –

+1

@ Matt Giá - Tôi tin rằng đó là những gì tính năng câu hỏi yêu thích là dành cho :). – swilliams

Trả lời

20

chẳng đả có giấy gói Python xung quanh C++ công cụ/C của họ, có sẵn dưới dạng nhị phân cho Windows, và nguồn cho các nền tảng khác:

http://www.perforce.com/perforce/loadsupp.html#api

Bạn sẽ tìm thấy tài liệu của họ về API kịch bản để thể hữu ích:

http://www.perforce.com/perforce/doc.current/manuals/p4script/p4script.pdf

Sử dụng API Python là khá giống với các khách hàng dòng lệnh:

PythonWin 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32. 
Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' for further copyright information. 
>>> import P4 
>>> p4 = P4.P4() 
>>> p4.connect() # connect to the default server, with the default clientspec 
>>> desc = {"Description": "My new changelist description", 
...   "Change": "new" 
...   } 
>>> p4.input = desc 
>>> p4.run("changelist", "-i") 
['Change 2579505 created.'] 
>>> 

tôi sẽ xác minh nó từ dòng lệnh:

P:\>p4 changelist -o 2579505 
# A Perforce Change Specification. 
# 
# Change:  The change number. 'new' on a new changelist. 
# Date:  The date this specification was last modified. 
# Client:  The client on which the changelist was created. Read-only. 
# User:  The user who created the changelist. 
# Status:  Either 'pending' or 'submitted'. Read-only. 
# Description: Comments about the changelist. Required. 
# Jobs:  What opened jobs are to be closed by this changelist. 
#    You may delete jobs from this list. (New changelists only.) 
# Files:  What opened files from the default changelist are to be added 
#    to this changelist. You may delete files from this list. 
#    (New changelists only.) 

Change: 2579505 

Date: 2008/10/08 13:57:02 

Client: MYCOMPUTER-DT 

User: myusername 

Status: pending 

Description: 
     My new changelist description 
7

Đây là những gì tôi đã đưa ra:

import os 

def CreateNewChangeList(description): 
    "Create a new changelist and returns the changelist number as a string" 
    p4in, p4out = os.popen2("p4 changelist -i") 
    p4in.write("change: new\n") 
    p4in.write("description: " + description) 
    p4in.close() 
    changelist = p4out.readline().split()[1] 
    return changelist 

def OpenFileForEdit(file, changelist = ""): 
    "Open a file for edit, if a changelist is passed in then open it in that list" 
    cmd = "p4 edit " 
    if changelist: 
     cmd += " -c " + changelist + " " 
    ret = os.popen(cmd + file).readline().strip() 
    if not ret.endswith("opened for edit"): 
     print "Couldn't open", file, "for edit:" 
     print ret 
     raise ValueError 
+1

Có vẻ ngớ ngẩn khi sử dụng os.popen() gọi khi bạn có thể sử dụng API/công cụ gốc được Perforce hỗ trợ. –

+4

Sử dụng mô-đun p4 liên kết bạn với một phiên bản cụ thể của API C++ lực lượng nếu tôi nhớ chính xác. Sử dụng dòng lệnh tương thích ngược, dễ dàng và nếu bạn thay đổi lệnh thành chỉnh sửa p4 -G, nó sẽ trả về các đối tượng như các đối tượng từ điển python marshalled. – grieve

+0

Sử dụng dòng lệnh p4 cũng dễ cấu hình quá – justinhj

2

Bạn có thể muốn kiểm tra các mô-đun P4Python. Nó có sẵn trên trang web của lực lượng và nó làm cho mọi thứ rất đơn giản.

4

Perforce's P4 Python module đề cập trong câu trả lời khác là con đường để đi, nhưng nếu cài đặt module này không phải là một tùy chọn mà bạn có thể sử dụng lá cờ -G để giúp phân tích cú pháp đầu ra p4.exe:

p4 [ options ] command [ arg ... ] 
    options: 
      -c client -C charset -d dir -H host -G -L language 
      -p port -P pass -s -Q charset -u user -x file 
    The -G flag causes all output (and batch input for form commands 
    with -i) to be formatted as marshalled Python dictionary objects. 
3

Xây dựng từ nguồn p4python yêu cầu tải xuống và giải nén p4 api được đề xuất cho phiên bản đó. Ví dụ, nếu xây dựng các phiên bản Windows XP x86 của P4Python 2008,2 cho ActivePython 2.5:

  • tải về và giải nén cả p4pythonp4api
  • fixup các setup.cfg cho p4python để trỏ đến thư mục p4api.

Để mở tệp để chỉnh sửa (thực hiện thanh toán), trên dòng lệnh, hãy xem 'p4 help open'.

Bạn có thể xem tệp mà không tạo danh sách thay đổi nếu bạn thêm tệp vào danh sách thay đổi mặc định, nhưng tốt hơn hết nên tạo danh sách thay đổi.

P4Python hiện không biên dịch cho activepython 2.6 không có studio trực quan 2008; libs được cung cấp được xây dựng với năm 2005 hoặc 2003. Buộc p4python xây dựng chống lại mingw gần như không thể, ngay cả với pexports của python26.dll và reimp/reassembly của các tệp .lib được cung cấp thành tệp .a.

Trong trường hợp đó, bạn có thể thay vì sử dụng tiến trình con, và trả lại kết quả p4 dưới dạng đối tượng trăn marshalled. Bạn có thể viết trình bao bọc lệnh của riêng bạn, lấy một mảng arg, xây dựng và chạy các lệnh và trả về từ điển kết quả.

Bạn có thể thử thay đổi mọi thứ, thử nghiệm và thành công, mở các tệp khác với tệp tương tự với 'p4 diff -se // ...'

2

Nhớ guys cài đặt gói phát triển cho Python cho p4api hoặc nó sẽ khiếu nại về các tiêu đề bị thiếu. Trong Ubuntu 10.10, chỉ cần làm một đơn giản:

apt-get install python2.6-dev 

Hoặc

apt-get install python3.1-dev 
Các vấn đề liên quan