我正在尝试用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
但没有别的。)
我对下一步应该是什么感到困惑。如果可能的话,我想避免额外的依赖,因为它看起来很简单。
答案 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 foo
和echo 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()