Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中subprocess.call()出现Python错误_Python_Call_Subprocess_Popen_Synchronous - Fatal编程技术网

循环中subprocess.call()出现Python错误

循环中subprocess.call()出现Python错误,python,call,subprocess,popen,synchronous,Python,Call,Subprocess,Popen,Synchronous,我想编写一个Python脚本: 读取目录中的所有子目录(这是循环1) 读取子目录中的当前图像(不是循环,因为它只有一个 (图片) 阅读此图像后,修复某些内容并将其写入新图像 在当前子目录中 所有这些都没问题,但当我尝试使用此新映像运行subprocess.call()时,我遇到了一个问题: 新建映像->子进程.cal()->新建映像2 从python脚本生成的“newimage2”在打开时会出现错误(但是如果我尝试通过命令行或不在子目录中循环运行,它会工作) 这是我上面描述的代码: for da

我想编写一个Python脚本:

  • 读取目录中的所有子目录(这是循环1)

  • 读取子目录中的当前图像(不是循环,因为它只有一个 (图片)

  • 阅读此图像后,修复某些内容并将其写入新图像 在当前子目录中

  • 所有这些都没问题,但当我尝试使用此新映像运行
    subprocess.call()
    时,我遇到了一个问题:

    新建映像->子进程.cal()->新建映像2

    从python脚本生成的“newimage2”在打开时会出现错误(但是如果我尝试通过命令行或不在子目录中循环运行,它会工作)

    这是我上面描述的代码:

    for dayFolder in listDayFolder:
               output_dataset.GetRasterBand(1).WriteArray(data1) 
    
            warp = "gdalwarp -t_srs '+proj=longlat +datum=WGS84 +no_defs' -ot Float32 -tps mecrator.tif " + fileName + ".tif";
    
    
           pipe = subprocess.call([warp], stdout=subprocess.PIPE, shell=True)
    

    我猜困难在于
    fileName
    没有被重新分配。我敢打赌,如果在调用
    subprocess.call
    之前调用
    print warp
    ,您会注意到同一命令的大量重复。也许你的意思是:

    warp = "gdalwarp -t_srs '+proj=longlat +datum=WGS84 +no_defs' "+
           "-ot Float32 -tps mecrator.tif " + dayFolder + "/" + fileName + ".tif"
    

    你的压痕到处都是。。。这就是代码的实际外观吗?(因为如果是这样,它甚至不会运行,而是会给您一个
    IndentationError
    )。为什么要使用
    shell=True
    ?您没有使用任何shell功能,唯一要做的就是打开一个安全漏洞。另外,如果要检查标准输出,可以使用
    子流程。检查输出
    (注意,文档中明确说明避免在
    子流程中设置
    stdout=PIPE
    。调用
    ,因为这可能会导致死锁!)。