我在Python程序中编写了这两行代码,它们运行得很好:
subprocess.Popen("./prog infile outfile >/dev/null", cwd="/path/to/prog", stdout=subprocess.PIPE, shell=True)
output = subprocess.Popen("prog1 infile1 2>/dev/null", stdout=subprocess.PIPE, shell=True).stdout.read()
但是这两行代码在我的PyGTK应用程序中不能正常工作。我从一个调用TreeView小部件的“行激活”信号的处理程序调用这些行。prog编写outfile,也没有在output变量中获得prog1的输出。在
有什么问题吗?在
谢谢你的意见。我在一个更小的PyGTK程序中复制了这种情况,Popen可以正常工作。在
Popen没有理由在PyGTK应用程序中有不同的行为。在
这意味着我在做一些其他的事情,一旦问题解决了,我会写下来。在
^{pr2}$在哪里
文件:
a cat
b bat
c mat
文件1:
hello world
以及程序anubadok is here。在
在
是你的电话引起的。子流程需要一个列表:
^{pr2}$首先,我看不到您等待子进程完成。在
这里可能发生的情况是pygtk启动一个子进程并立即退出,python垃圾收集器销毁Popen对象。在
当您在pythonshell或其他一些长时间运行的函数中运行相同的代码时,Popen将获得更多的时间,希望子进程能够完成。在
要快速测试这是否真的是问题所在,请尝试在Popen调用之后添加
time.sleep(1)
。在您应该做的是调用Popen对象上的
.communicate()
,以确保子进程完成其任务并终止。在其次,我遇到过这样的情况:pygtk程序临时将工作目录更改为其他目录,然后再将其更改回原来的目录。在
要快速测试此情况,请尝试为
/path/to/prog
以及infile、outfile、redirect等提供完整路径相关问题 更多 >
编程相关推荐