簡體   English   中英

Subprocess.Popen process.communicate() function 錯誤

[英]Subprocess.Popen process.communicate() function error

我嘗試使用此解決方案答案來解決我的問題,但是在使用該解決方案時出現此錯誤:

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() function,但是當將變量打印到控制台時,它是空白的。 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”命令可能會失敗,因為您沒有為它提供有效的更改規范(或者您沒有登錄,或者任何其他可能的錯誤)。

請參閱您鏈接的有關使用 P4Python API 的答案中的評論。 這是一個更容易解決這個問題的方法; 除其他外,它會將錯誤顯示為有用的 Python 異常,而不是像這段代碼顯然那樣將它們發送到 void。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM