【发布时间】:2018-04-08 11:13:50
【问题描述】:
我正在尝试用 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好像没有收到line2,虽然
/usr/bin/open -n -a /Applications/Wine\ Stable.app
它本身很好(它会打开Wine,但没有别的。)
我对下一步应该做什么感到很困惑。如果可能的话,我想避免额外的依赖,因为它看起来很简单。
【问题讨论】:
-
shlex似乎没有保留换行符,您需要在 shell 中以某种方式区分命令(因为它们现在都在一行上)。我建议在命令之间使用&&。 -
这是一个开始,感谢您注意到这一点,但它似乎仍然不起作用,甚至为 '''/usr/bin/open -n -a /Applications/Wine\ Stable 替换行.app && cd /Applications/application/ ''' 甚至不打开 wine,而 '''/usr/bin/open -n -a /Applications/Wine\ Stable.app''' 会
-
Wine Stable.app在您调用它或阻止终端时是否返回?如果它被阻塞,那么其他命令在它完成之前不会运行。 -
我怎么知道,如果它被阻塞,我该如何解决这个问题?
-
尝试在普通终端中运行相同的命令,看看终端是否在应用打开或等待关闭时继续工作。如果程序阻塞了终端,您可以对
subprocess.Popen进行两次调用,或者您可以使用单个&而不是两个&&将程序分叉到后台。