簡體   English   中英

卡在python子流程調用中

[英]Stuck inside a python subprocess call

我正在嘗試使用Windows 2012服務器上的gpg可執行文件解密文件。 當前,腳本訪問“ try”塊,然后無限期地停留在那里。 該文件的大小約為500mb,因此解密需要花費不到10分鍾的時間。 我讓它運行了最長的一個小時。 這是此代碼:

# decrypt the pgp file
comm = (gpg + ' --batch --passphrase passphrase --homedir='+current_path
           +' -o ' + zip_name +' --decrypt ' + file_name)

try:
    subp = subprocess.check_call(comm, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
    stdout_data, stderr_data = subp.communicate()
    print stdout_data, stderr_data
except subprocess.CalledProcessError as e:
    print e.output
    logger.update('Error', process, runtime=0, error=e)
    raise Exception('Error Decrypting File')

不包括在內,但密鑰已導入。

有什么我可以添加/刪除或做的不同的事情:1)更好地了解主機系統(Windows服務器)中正在發生的事情,以及2)不要無限期運行並向您報告有關其無限期運行的有用信息。

讓我知道是否需要澄清。

來自python的subprocess.check_call()文檔:

注意:請勿將此功能與stdout=PIPEstderr=PIPE一起使用。 如果子進程向管道生成足夠的輸出以填充OS管道緩沖區,則該子進程將阻塞,因為未從中讀取管道。

考慮到您嘗試解密500MB,我可以肯定地說您將達到管道大小限制。 我建議您用打開的文件描述符或現有的文件對象替換PIPE

順便說一句,我對您構建命令行的方式感到有些驚訝,據我了解subprocess.check_call需要一個字符串列表,而不是字符串本身。

command = [gpg, "--batch", "--passphrase passphrase", "--homedir=current_path",
           "-o", "zip_name", "--decrypt", file_name]

從3.3版開始,超時選項已添加到subprocess模塊的許多功能中。 您可能會發現調試問題很有用。

暫無
暫無

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

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