我试图运行一个打开命令提示符的python脚本(OSGeo4W.bat是一个命令提示行)。我可以让它打开,但现在我想发送命令提示命令。
import subprocess
myProcess = subprocess.Popen(['C:\OSGeo4W64\OSGeo4W.bat'],shell = False) #opens command prompt
myProcess.communicate('gdal2tiles -p raster -z 0-1 new.jpg abc')
myProcess.wait()
print("my process has terminated")
我也试过
subprocess.check_call('gdal2tiles -p raster -z 0-1 new.jpg abc', shell=False)
我一直收到错误说" WindowsError:[错误2]系统无法找到指定的文件"
但是,如果我要保持命令提示符它打开并输入" ' gdal2tiles -p raster -z 0-1 new.jpg abc' "然后它会像我想的那样工作。帮助会很棒,谢谢!
答案 0 :(得分:2)
尝试:
check_call('gdal2tiles -p raster -z 0-1 new.jpg abc', shell=True)
shell=True
更改how the executable is searched on Windows。
或gdal2tiles
仅适用于OSGeo4W.bat
创建的环境:
shell = Popen(r'C:\OSGeo4W64\OSGeo4W.bat', stdin=subprocess.PIPE)
shell.communicate('gdal2tiles -p raster -z 0-1 new.jpg abc')
# you don't need shell.wait() here
注意:r""
字面意思。有必要避免转义路径中的反斜杠。
答案 1 :(得分:-1)
对于那些仍在努力解决这个问题的人来说,这就是我所发现的。 " stdin = subprocess.PIPE"上面的方法适用于OSGeo4W64中的某些命令行工具,但不是全部。它适用于gdal_translate,但不适用于pdal翻译。不知道为什么;(
我的解决方案:
OSGeo4Wenv = r' CALL" C:/OSGeo4W64/bin/o4w_env.bat" '
pdal_translate_String = r' c:/ OSGeo4W64 / bin / pdal translate c:\ inputFile c:\ outputFile radiusoutlier --filters.radiusoutlier.min_neighbors = 2 --filters.radiusoutlier.radius = 8.0 --filters.radiusoutlier .extract =真'
Cmd = str(OSGeo4Wenv)+' &安培; ' + STR(pdal_translateCmd)
shell = subprocess.call(Cmd,stdout = None,shell = True)
发生了什么事? 1)通过调用" OSGeo4Wenv"打开shell并设置OSGeo4W环境。这通常由OSGeo4W.bat文件调用。如果没有这个,命令行程序就不知道在哪里寻找库。
2)然后将pdal_translate命令发送到dos shell,因为在Windows中,多个命令可以通过"&"符号。我使用python 2.7的.call方法。它具有等待过程结束的优点。如果您使用多处理map.pool方法同时启动多个进程,那就太好了。
希望这能帮到别人! 尼古拉斯