Perforce p4c.run("print" error - AttributeError: OutputBinary

Discussion in 'Python' started by kbperry, Mar 28, 2006.

  1. kbperry

    kbperry Guest

    Hi all,
    I am getting an error message when trying to use the P4 print command
    via the python api for perforce.

    Anytime that I run p4c.run("print","-q", eachFile), I keep getting an
    error message: "AttributeError: OutputBinary."

    Here is my code below: Please Help.


    import p4
    #import perforce module
    #For complete API see
    http://public.perforce.com/guest/robert_cowham/perforce/API/python/index.html
    p4c = p4.P4()
    p4c.port = "perforce.ic.ncs.com:1424"
    p4c.user = "perrk9"
    p4c.parse_forms()
    p4c.connect()
    path = "//practice/perrk9/..."
    localTemp = "c:\perforce_temp_dir\\"


    first = p4c.run( "counter", "galloway_deploy" )[0]
    # here 'last_change_record' is a dictionary
    last_change_record = p4c.run( "changes", "-m", "1", path )[0]
    print "last change record"
    print last_change_record
    last = last_change_record['change']
    print "last \n"
    print last

    status_dict = { "right only" :"add", "left only" :"delete", "content"
    :"edit", "identical" :"no change" }

    result = p4c.run( "diff2", "-q", path + "@" + first , path + "@" + last
    )
    # result is an Array, each element is a Dictionary

    #Find out which files were add/edited/deleted and throw them into lists
    deploy = [] # add/edit list
    undeploy = [] # delete list
    for changed_file in result:
    action = status_dict[ changed_file['status'] ]
    print action
    if ((action =='add') or (action == 'edit')):
    print "Changed file = "
    print changed_file['depotFile']
    deploy.append(changed_file['depotFile']) #appending each file to our
    'deploy' list
    elif action == delete:
    undeploy.append(changed_file['depotFile']) #appending each file to
    our 'undeploy' list

    #print the deploy list
    print "deploy list"
    print deploy
    for eachFile in deploy :
    print eachFile

    file = p4c.run("print","-q", eachFile)
    kbperry, Mar 28, 2006
    #1
    1. Advertising

  2. kbperry

    kbperry Guest

    I received a response from Robert Cowham ( the author of the API):

    The problem is that something like print was only expected to be done
    for text files not binary.

    You could try editing p4.py and add a method similar to:

    def OutputText(self, text):
    "Adds text lines to the output data."
    for line in string.split(text, '\n'):
    self.output.append(line)

    e.g. around line 214 add

    def OutputBinary(self, text):
    "Adds lines to the output data."
    self.output.append(text)


    Note: I am sure that Robert will be updating the P4 module for python,
    so if you can I would just download the most recent version (I would
    give him a couple of days though).
    kbperry, Mar 28, 2006
    #2
    1. Advertising

  3. kbperry

    kbperry Guest

    kbperry, Mar 28, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. ozgwei
    Replies:
    3
    Views:
    14,577
    srinivasulu.reddy
    Jun 5, 2007
  2. Ruchika

    popen3 and Perforce

    Ruchika, Sep 9, 2004, in forum: Python
    Replies:
    1
    Views:
    314
    Sam Holden
    Sep 9, 2004
  3. Robert Cowham

    ANN: P4Python 0.5 - Interface to Perforce

    Robert Cowham, Jan 21, 2005, in forum: Python
    Replies:
    0
    Views:
    359
    Robert Cowham
    Jan 21, 2005
  4. ozgwei
    Replies:
    3
    Views:
    6,013
    brucepainter
    Jun 8, 2007
  5. Kim Bendtsen
    Replies:
    0
    Views:
    301
    Kim Bendtsen
    Sep 12, 2006
Loading...

Share This Page