我有一个看起来像这样的命令
subprocess.Popen('shp2pgsql -s 17932 \\storage1\dev1\gis\a.shp asmithe.myTable | psql -U asmithe -h example.org -d inventory -q', shell=True).wait()
psql
有-q
选项可以安静但找不到shp2pgsql
的任何内容
答案 0 :(得分:0)
最简单的方法是捕获stdout和stderr并将它们发送到DEVNULL
(我使用espeak 4; echo 'bye'
作为测试命令; echo
打印到stdout和espeak
,好吧,这样说会有输出没有被捕获)
In [14]: p = subprocess.Popen("espeak 4; echo 'bye'", shell=True, \
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).wait()
In [15]: p = subprocess.Popen("espeak 4; echo 'bye'", shell=True).wait()
bye
如果您使用的是linux / unix计算机,那么您可以做的另一件事就是将所有内容发送到/dev/null
In [16]: p = subprocess.Popen("echo 'bye' > /dev/null 2>&1", shell=True).wait()
# note: this is bash. Works for me on zsh as well,
# but might not work for other variants of sh
# use command 2> /dev/null if you only want to redirect stderr.
附录:等等,您正在使用管道,第一个命令显然是输出到stderr
对于你的脚本,如果我单独使用linux命令,我就这样写:
subprocess.Popen('shp2pgsql -s 17932 \\storage1\dev1\gis\a.shp asmithe.myTable 2> /dev/null | '
'psql -U asmithe -h example.org -d inventory -q', shell=True).wait()
#implicit string concat is awesome for breaking up long lines