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 异常。
我试过这个 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 异常。