Subprocess.Popen process.communicate()函数错误

Subprocess.Popen process.communicate() function error

我试过这个 solution answer 来解决我的问题,但是在使用这个解决方案时我得到了这个错误:

Traceback (most recent call last):
  File "version_build.py", line 125, in <module>
    if __name__=='__main__': main()
  File "version_build.py", line 113, in main
    change = p4change(p4)
  File "version_build.py", line 90, in p4change
    change = p.communicate(changespec)[0]
  File "C:\Python36\Lib\subprocess.py", line 843, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "C:\Python36\Lib\subprocess.py", line 1086, in _communicate
    self._stdin_write(input)
  File "C:\Python36\Lib\subprocess.py", line 781, in _stdin_write
    self.stdin.write(input)
TypeError: a bytes-like object is required, not 'str'

我的主要问题是:为什么我会收到这个错误,我是否遗漏了其他问题的解决方案?

我正在使用 python3。 我曾尝试使用 str.encode() 函数,但在将变量打印到控制台时,它是空白的。 b''

这是失败的行(主要是 p.communicate 行):

    changespec = 'change: new\n' + description
    
    p = subprocess.Popen([p4, 'change', '-i'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    change = p.communicate(changespec)[0]
    return change

“p4 change”命令可能失败了,因为您没有提供有效的变更规范(或者您没有登录,或者其他任何可能的错误)。要进一步调试,您需要从命令中捕获 stderr;应该有一条错误消息,可以准确解释出了什么问题。

查看您链接的关于使用 P4 的答案中的评论Python API。这是解决这个问题的更简单的方法;除其他事项外,它会自动将错误显示为有用的 Python 异常。