gpt4 book ai didi

python - 如何在 Python/Django 中调试子进程调用

转载 作者:行者123 更新时间:2023-12-04 19:34:23 24 4
gpt4 key购买 nike

在我的 Python/Django 代码中,我调用了 gdalbuildvrt过程。此过程应创建一个 .VRT 文件,但它没有。为了检查它,我将子进程输出写入调试文件。我就是这样做的:

process = subprocess.Popen(["gdalbuildvrt", mosaic, folder], stdout=subprocess.PIPE)
stdout = process.communicate()[0]

with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "debug.txt"), 'w') as file:
file.write('{}'.format(stdout) + " -> " + mosaic)

结果我在 debug.txt 文件中看到了这个:
b'0...10...20...30...40...50...60...70...80...90...100 - done.\n' -> /var/www/vwrapper/accent/accent/layers/raw/mosaic.vrt

所以,你可以看到调试语句的第一部分说,没关系:
0...10...20...30...40...50...60...70...80...90...100 - done.

第二部分说, /var/www/vwrapper/accent/accent/layers/raw/mosaic.vrt应该创建。但是,当我转到目标文件夹并刷新它时,我在那里看不到 mosaic.vrt 文件。那么,这可能有什么问题,我该如何解决?我应该补充一点,在 Windows 机器上它是 100% 好的,但在 CentOS 上却不行。

最佳答案

process = subprocess.Popen(["gdalbuildvrt", mosaic, folder], 
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
ret = process.returncode

或者
process = subprocess.Popen(["gdalbuildvrt", mosaic, folder], 
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

这将重定向 stderrstdout .

然后记录这两件事:

所有错误记录都应该在 stderr 上,而不是 stdout .任何返回码都将通过 process.returncode 出现.

您也可以使用更高级别的进程之一,例如 subprocess.check_call()

关于python - 如何在 Python/Django 中调试子进程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008397/

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