2009-12-01 113 views
1

让我重新说明我以前的问题。 我刚刚在ArcGIS中使用pythong作为脚本语言创建了一个工具。该工具使用subprocess.popen执行(运行)外部程序。当我从ArcGSIS运行该工具时,会出现一个仅显示以下内容的窗口。Python打印缓冲

Executing: RunFLOW C:\FLOW C:\FLOW\FLW.bat 
Start Time: Mon Nov 30 16:50:37 2009 
Running script RunFLOW... 
Completed script RuFLOW... 
Executed (RunFLOW) successfully. 
End Time: Mon Nov 30 16:50:48 2009 (Elapsed Time: 11.00 seconds) 

该脚本是如下

# Import system modules 
import sys, string, os, arcgisscripting, subprocess 
# Create the Geoprocessor object 
gp = arcgisscripting.create() 
# Read the parameter values: 
# 1: input workspace 
prj_fld = gp.GetParameterAsText(0) 
Flow_bat = gp.GetParameterAsText(1) 
os.chdir(prj_fld) 
p=subprocess.Popen(Flow_bat,shell=True,stdout=subprocess.PIPE) 
stdout_value = p.communicate()[0] 
print '\tstdout:', repr(stdout_value) 

当我从命令窗口运行同一程序,它打印一个完整的信息(日期,迭代的数量等)的屏幕。我想在从ArcGIS运行模型之后出现的窗口中查看所有这些信息,以及它现在正在打印的内容。 我试过打印,沟通,冲洗但无法做到。有什么建议么?

当我运行该脚本,因为它是现在,它运行的可执行文件,但如下

ERROR 999998: There are no more files. 

感谢

+0

1.请忽略混淆和无关的垃圾,如“让我重述我以前的问题”。然后,请查看页面右侧的格式化提示。 – 2009-12-01 01:46:17

+0

@Mesut:重新格式化您的问题:请参阅编辑器帮助,了解如何执行代码块 – jkp 2009-12-01 01:48:53

+0

感谢您的格式化... – Mesut 2009-12-01 01:56:28

回答

0

我一无所知ArcGIS中给出了一个错误,所以我可以在被拍摄这里的黑暗,但是...如果你想要标准输出,你通常不需要communicate()方法。你想是这样的:

p=subprocess.Popen(Flow_bat,shell=True,stdout=subprocess.PIPE) 
stdout_value = p.stdout.read() 

communicate()方法用于交互有一个过程。从文档:

Interact with process: Send data to stdin. Read data from stdout 
and stderr, until end-of-file is reached. Wait for process to 
terminate. 

我猜测,当ArcGIS中运行你的脚本stdin未连接,并使脚本退出的某些原因。

+1

感谢您的信息。我尝试添加 下面的脚本p = subprocess.Popen(Flow_bat,shell = True,stdout = subprocess.PIPE,stderr = subprocess.STDOUT) .wait() 使用此脚本执行我的程序(可以从putputs中检查它),但它仍然不打印我的收费进度窗口上的命令窗口信息。 我试过stdout_value = p.stdout.read()并打印它,但它也没有工作。 还有其他建议吗? – Mesut 2009-12-01 19:22:20

+0

我不确定还有什么建议。我无法访问ArcGIS,因为我很盲目。 – larsks 2009-12-04 01:01:52

0

我不知道你是否意识到这一点或没有,但我用:

gp.AddMessage('blah blah') 

得到的消息出现在ArcGIS中处理窗口。它是地理处理器对象的一种方法,即您在Python中导入以访问ArcGIS引擎的库。如果您正在执行任何地理处理,则您已经导入了此库。