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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • kbperry

    #1

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

    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

    p4c = p4.P4()
    p4c.port = "perforce.ic.nc s.com:1424"
    p4c.user = "perrk9"
    p4c.parse_forms ()
    p4c.connect()
    path = "//practice/perrk9/..."
    localTemp = "c:\perforce_te mp_dir\\"


    first = p4c.run( "counter", "galloway_deplo y" )[0]
    # here 'last_change_re cord' is a dictionary
    last_change_rec ord = p4c.run( "changes", "-m", "1", path )[0]
    print "last change record"
    print last_change_rec ord
    last = last_change_rec ord['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(c hanged_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

    #2
    Re: Perforce p4c.run("p rint" error - AttributeError: OutputBinary

    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(te xt, '\n'):
    self.output.app end(line)

    e.g. around line 214 add

    def OutputBinary(se lf, text):
    "Adds lines to the output data."
    self.output.app end(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).

    Comment

    • kbperry

      #3
      Re: Perforce p4c.run("p rint" error - AttributeError: OutputBinary

      This seemed to fix my problem.

      Keith

      Solutions for Robotics, AI and everything in between Check out some of our projects.


      Comment

      Working...