1

我在使用 wine 启动程序的 Python 脚本中遇到问题。当脚本在 Eclipse/Pydev 下执行时,启动的程序崩溃,而当脚本从 shell(命令行)运行时它们成功。我认为这应该是由于 Pydev 上下文执行。

我知道对于编码,从 IDE 和 shell 运行分别返回 utf8 和 ascii,所以我认为有一些上下文配置差异可能会导致我的问题。我也知道可以在菜单运行配置->通用中更改编码。但我没有找到任何解决我的问题的设置。有没有办法知道解决我的问题的上下文差异是什么?

为了更准确地解决这个问题,有一些精度:

我有两个 Windows 程序(比如说 prog1.exe 和 prog2.exe),我必须从 Python 2.7 脚本一起启动它们。我在 Linux (Ubuntu 12.04) 下工作,所以我使用 wine 来启动程序。我编写了一个 python 脚本,使用 subprocess.Popen() 然后轮询运行它们。

我使用 Pydev 和 Eclipse(Indigo 和 Juno)来调试我的脚本。

这是我的脚本的样子:

from time import sleep
import subprocess

cmd_prog1 = ['wine', '/home/user/folder/to/progs/prog1.exe','--arg1','/home/user/folder/to/conf1/file1','--arg2','/home/user/folder/to/conf1/file2','--arg3','some_arg',....]
cmd_prog2 = ['wine', '/home/user/folder/to/progs/prog2.exe','--arg1','/home/user/folder/to/conf2/file1','--arg2','/home/user/folder/to/conf2/file2','--arg3','some_arg',....]

file1 = "/home/user/result/folder/file1.txt"
file2 = "/home/user/result/folder/file2.txt"

o_file1 = open(file1, "w+")
p_prog1 = subprocess.Popen(cmd_prog1,shell=False,stdout=o_file1,stderr=o_file1)
o_file2 = open(file2, "w+")
p_prog2 = subprocess.Popen(cmd_prog1,shell=False,stdout=o_file2,stderr=o_file2)

res_prog1 = None
res_prog2 = None
timer = 0
while res_prog1 == None or res_prog2 == None:
    timer += 1
    sleep(1)
    res_prog1 = p_prog1.poll()
    res_prog2 = p_prog2.poll()
    print timer

o_file1.close()
o_file2.close()

print res_prog1, res_prog2

当我从 shell 启动我的 Python 脚本时,它工作正常,prog1 和 prog2 在 8 秒后返回 0,并且我在 file1 和 file2 中获得了正确的日志。

当我从 IDE 启动脚本时,prog1 和 prog2 在 2 秒后返回 3,我收到以下错误:

Fatal Python error: buffer overflow in getpathp.c's joinpath()
fixme:msvcr90:__clean_type_info_names_internal (0x1e1f9bc8) stub

最后一条消息也出现在正确的行为中,但不是真正的问题

谢谢您的回复

4

0 回答 0