3

概述:

我有一个应用程序,有时必须用芹菜制作一些东西——如果它是简单的任务,比如计算一些东西——一切都很好。

我有一项任务必须使用 MS Windows 程序将现有文件转换为另一个文件。所以-我安装了 WINE,然后安装了应用程序并将以下任务添加到我的 tasks.py:

def convert_file( fil, to_format = 'pdf', save_to = '/tmp', callback = None ):
    devnull = open( '/dev/null', 'w' )
    commands = "xvfb-run -a wine '[ABSOLUTE_PATH_TO_WINDOWS_APP]' /r /f 104 %s" % fil
    p = subprocess.Popen( commands, shell=True, cwd='/home/test', env=os.environ, stdout = devnull, stderr = subprocess.STDOUT )
    p.wait()
    devnull.close()
    if callback:
        subtask( callback ).delay( )
    else:
        return outfile

问题:

该命令未被调用或被调用但没有发生任何事情(文件系统中的任何地方都没有新文件) - 但是如果我从 bash 或交互式 python shell 调用这个命令,一切都很好。

编辑: 当我从命令行调用命令时,我得到这个:

test@ubuntu:~$ xvfb-run -a /home/test/.wine/....exe /r /f 104 /home/test/fs/...
err:winediag:X11DRV_WineGL_InitOpenglInfo The Mesa OpenGL driver is using software rendering, most likely your OpenGL drivers haven't been installed correctly
test@ubuntu:~$ XIO:  fatal IO error 11 (Zasoby chwilowo niedostępne) on X server ":99"
      after 1262 requests (1226 known processed) with 0 events remaining.
[Here i must press enter]
test@ubuntu:~$ 
4

1 回答 1

3

采用

p = subprocess.Popen( commands, shell=True, cwd='/home/test', env=os.environ, stdout = subprocess.PIPE, stderr = subprocess.PIPE)

对于您的 Popen 命令,然后

print p.communicate()
p.wait()
print p.communicate()

查看它打印的内容stdoutstderr找出您做错了什么。

编辑:Xvfb是一个假帧缓冲区;它没有硬件加速。尝试将您的wine设置更改为不需要硬件加速/不使用 OpenGL/使用winecfg.

于 2011-07-22T12:31:36.317 回答