在Mac OSX上运行Python 3.6中的wine命令

时间:2017-10-26 22:51:35

标签: python macos wine

我正在尝试用Python编写一个脚本,打开wine然后将代码发送到wine终端以打开.exe程序。 .exe程序也是命令驱动的。

我可以打开wine,但我无法继续下去:

import shlex, subprocess

line = "/usr/bin/open -n -a /Applications/Wine\ Stable.app"
line2 = '''cd /Applications/application/ && wine application.exe /h1 
/k0 Z:/Users/myname/Desktop/File.TXT''' 
line = shlex.split(line)
p1 = subprocess.Popen(line)
p1.stdin.write(line2.encode())

上述方法无效,wine似乎无法接收第2行,但

/usr/bin/open -n -a /Applications/Wine\ Stable.app

本身很好(它打开Wine但没有别的。)

我对下一步应该是什么感到困惑。如果可能的话,我想避免额外的依赖,因为它看起来很简单。

1 个答案:

答案 0 :(得分:1)

以下在很多情况下(在Linux上)对我有用:

import subprocess

command = 'echo "echo foo && echo bar" | wine cmd > std_out.txt 2> std_error.txt &'
subprocess.Popen(command, shell = True)

(我相信wine也可以作为MacOS上的命令使用。如果我错了,请纠正我。)

该命令会启动类似Windows / DOS的shell(wine cmd)。实际上你可以在你的Linux shell中键入wine cmd并点击回车 - 你会发现自己在DOS shell中。下一步是将命令输入DOS shell。我通过将它们作为一个字符串输入它来做到这一点。在我的示例中,我运行了两个命令:echo fooecho bar。初始echo将命令字符串写入stdout,以下|打开管道并将字符串转发到DOS shell。

此外,一旦将命令发送到DOS shell,请记住它需要Windows路径(当您更改目录等时)。即在将它们发送到DOS shell之前,必须将Unix路径转换为Windows路径。您可以在命令行上自动转换路径,如...

winepath -w /home/ 2> /dev/null

...导致Z:\home\(例如)。或者,以下Python剪辑将为您执行相同的操作:

def convert_unix_path_to_windows_path(in_path):
    cmd = ['winepath', '-w', in_path]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = proc.communicate()
    return out.decode('utf-8').strip()