我正在尝试在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)无法无限期运行并报告有用的信息为什么它无限期地运行。
如果需要澄清,请告诉我。
答案 0 :(得分:3)
来自python的subprocess.check_call()
文档:
注意:请勿对此功能使用
stdout=PIPE
或stderr=PIPE
。子进程将阻塞它是否为管道生成足够的输出以填充OS管道缓冲区,因为没有读取管道。
考虑到您正在尝试解密500MB,我认为可以肯定地说您将达到管道大小限制。我建议你用一个打开的文件描述符或现有的文件对象替换PIPE
。
subprocess.check_call
需要一个字符串列表,而不是一个字符串本身。
command = [gpg, "--batch", "--passphrase passphrase", "--homedir=current_path",
"-o", "zip_name", "--decrypt", file_name]
从版本3.3开始,在subprocess
模块的许多功能中添加了超时选项。您可能会发现调试问题很有用。