Perforce(P4)报错:exception: Operation ‘dm-UpdateUserSpecF‘ failed.Required parameter ‘data‘ not set!

        使用p4添加用户并设置密码的时候报错了,这个问题显然是字符编码的问题,如果需要传入中文的name或者fullname,需要显式设置p4的编码为utf8就可以解决了。

from P4 import P4, P4Exception
import sys
p4 = P4()
def add_user(user_name,password,email,fullname):
    try:
        user={
        'User': user_name,
        'Email': email,
        'FullName': fullname,
        }
        ret=p4.save_user(user,"-f") #等效代码:p4.run('user', '-i','-f', input=user)
        print(ret)
        p4.input = [password,password]#newpasswd re-enter-newpasswd
        ret = p4.run_passwd(user_name)
        print(ret)
    except P4Exception as e:
        print("exception: "+str(e))
        exit(1)
    finally:
        if p4.connected():
            p4.disconnect()
def main():
    try:
        p4.exception_level = 1
        p4.charset="utf8"#要设置为utf8,否则传入中文就报错dm-UpdateUserSpecF
        p4.user = sys.argv[1]
        p4.port = sys.argv[2]
        p4.password = sys.argv[3]#password和ticket等效
        print(sys.argv[1],sys.argv[2],sys.argv[3])
        print(sys.argv[4],sys.argv[5],sys.argv[6],sys.argv[7])
        ret=p4.connect()
        print(ret)
        user_name=sys.argv[4]
        password=sys.argv[5]
        email=sys.argv[6]
        fullname=sys.argv[7]
        add_user(user_name,password,email, fullname)
    except P4Exception as e:
        print("exception: "+str(e))
        exit(1)
if __name__ == "__main__":
    main()
    exit(0)

关键语句就是这条:

p4.charset="utf8"#要设置为utf8,否则传入中文就报错dm-UpdateUserSpecF