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?
Trả lời
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
Đâ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
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ợ. –
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
Sử dụng dòng lệnh p4 cũng dễ cấu hình quá – justinhj
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.
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.
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:
Để 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 // ...'
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
Tôi đặt này ở đây vì vậy tôi có thể tìm kiếm nó trong tương lai :) –
@ 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