Python和PyGTK中的Popen()函数为什么表现不同?

2024-04-23 19:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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。在


Tags: 代码dev程序trueoutputstdoutshellnull
2条回答

OSError: [Errno 2] No such file or directory

是你的电话引起的。子流程需要一个列表:

^{pr2}$

首先,我看不到您等待子进程完成。在

这里可能发生的情况是pygtk启动一个子进程并立即退出,python垃圾收集器销毁Popen对象。在

当您在pythonshell或其他一些长时间运行的函数中运行相同的代码时,Popen将获得更多的时间,希望子进程能够完成。在

要快速测试这是否真的是问题所在,请尝试在Popen调用之后添加time.sleep(1)。在

您应该做的是调用Popen对象上的.communicate(),以确保子进程完成其任务并终止。在

其次,我遇到过这样的情况:pygtk程序临时将工作目录更改为其他目录,然后再将其更改回原来的目录。在

要快速测试此情况,请尝试为/path/to/prog以及infile、outfile、redirect等提供完整路径

相关问题 更多 >