当我运行此代码时:
public function db_backup()
{
$this->load->dbutil();
$backup =& $this->dbutil->backup();
$this->load->helper('file');
write_file('your_file_path/your_DB.zip', $backup);
}
我收到以下错误:
stdout = Popen(callbackquery, shell=True, stdout=PIPE).stdout
output = stdout.read()
if output.find("No records were found that matched the search criteria") == -1:
print(output)
else:
# Do nothing
print("It's fine")
我知道这与字符编码有关,但我不知道在哪里以及如何转换它?
答案 0 :(得分:1)
对于那些想知道为什么会出现此问题的人。来自子流程documentation -
如果 universal_newlines 为True,则文件对象stdin,stdout和stderr在通用换行模式下作为文本流打开,如上面常用的参数中所述,否则它们将作为二进制流打开。 / p>
universal_newlines 的默认值为False,这意味着stdout是二进制流,它返回的数据是字节字符串。
问题出现是因为我们试图在传递DateTime.Parse(x.process_date.Value)
作为参数的字节串上执行.find()
。一个非常简单的例子来展示这个 -
string
您应该>>> b'Hello'.find('Hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' does not support the buffer interface
数据,例如 -
.decode()
答案 1 :(得分:0)
If "No records were found that matched the search criteria" in output:
Do something
答案 2 :(得分:0)
stdout = Popen(callbackquery, shell=True, stdout=PIPE, universal_newlines=True).stdout
output = stdout.read()