gpt4 book ai didi

python - python子进程检查输出:如何获取整个消息

转载 作者:行者123 更新时间:2023-12-02 19:44:01 26 4
gpt4 key购买 nike

我正在使用subprocess.check_output删除hadoop中的文件夹,并且希望能够获得与从控制台执行hadoop命令相同的结果。

因此,有可能我尝试删除其中一些不存在的多个目录。

该命令完全失败(因为找不到我的“不存在”目录)

subprocess.check_output('hadoop fs -rm -r -skipTrash my_host/path_to_existing_directory my_host/path_to_nonexisting_directory', shell = True)

为了防止失败,我可以这样做:
try:
subprocess.check_output('hadoop fs -rm -r -skipTrash my_host/path_to_existing_directory/ my_host/path_to_nonexisting_directory', shell = True)
except subprocess.CalledProcessError as e:
print(e.output, 'some of the folders were not found')

第二个选项更好,因为它告诉我删除了哪些目录。为了区分一些没有,我可以在打印输出中添加“找不到某些文件夹”。

但是,当我从命令行执行相同的命令时,我会得到更好的信息,我想复制这些信息:
hadoop fs -rm -r -skipTrash  my_host/path_to_existing_directory/ my_host/path_to_nonexisting_directory

返回值:
Deleted my_host/path_to_existing_directory
rm: `my_host/path_to_nonexisting_directory': no such file or directory

最佳答案

该过程可能会将错误消息写入标准错误stderr,您也可以使用参数stdout将其重定向到标准输出stderr=subprocess.STDOUT来捕获。

因此,您的代码将如下所示:

try:
output = subprocess.check_output('...', shell = True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
print(e.output, 'some of the folders were not found')

关于python - python子进程检查输出:如何获取整个消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62060286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com