卡在 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')
未包含,但已导入密钥。
有什么我可以 add/remove 或做不同的事情来 1) 更好地了解主机系统(windows 服务器)和 2) 不 运行 无限期并报告有用的信息,说明为什么 运行ning 无限期地。
如果需要任何说明,请告诉我。
来自 python 的 subprocess.check_call()
文档:
Note: Do not use stdout=PIPE
or stderr=PIPE
with this function. The child process will block if it generates enough output to a pipe to fill up the OS pipe buffer as the pipes are not being read from.
考虑到您正在尝试解密 500MB,我认为可以肯定地说您将达到管道大小限制。我建议您用打开的文件描述符或现有文件对象替换 PIPE
。
顺便说一句,我对您构建命令行的方式感到有点惊讶,据我了解,subprocess.check_call
需要一个字符串列表,而不是字符串本身。
command = [gpg, "--batch", "--passphrase passphrase", "--homedir=current_path",
"-o", "zip_name", "--decrypt", file_name]
从 3.3 版本开始,subprocess
模块的许多功能都添加了超时选项。您可能会发现调试问题很有用。
我正在尝试在 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')
未包含,但已导入密钥。
有什么我可以 add/remove 或做不同的事情来 1) 更好地了解主机系统(windows 服务器)和 2) 不 运行 无限期并报告有用的信息,说明为什么 运行ning 无限期地。
如果需要任何说明,请告诉我。
来自 python 的 subprocess.check_call()
文档:
Note: Do not use
stdout=PIPE
orstderr=PIPE
with this function. The child process will block if it generates enough output to a pipe to fill up the OS pipe buffer as the pipes are not being read from.
考虑到您正在尝试解密 500MB,我认为可以肯定地说您将达到管道大小限制。我建议您用打开的文件描述符或现有文件对象替换 PIPE
。
顺便说一句,我对您构建命令行的方式感到有点惊讶,据我了解,subprocess.check_call
需要一个字符串列表,而不是字符串本身。
command = [gpg, "--batch", "--passphrase passphrase", "--homedir=current_path",
"-o", "zip_name", "--decrypt", file_name]
从 3.3 版本开始,subprocess
模块的许多功能都添加了超时选项。您可能会发现调试问题很有用。